不用实例化类而调用其非静态函数

wavestudio 2007-11-06 11:46:42
今天在看一个有点意思的题(大家可能已经很熟悉了)时举一反三了一下,以资备忘。
题目是:不实例化结构,要求取得其中的某个数据成在结构中的偏移量
答案理所当然的是大家都很熟悉的宏了:
#define OFFSET(TYPE, MEMBER) (&((TYPE *)0)->MEMBER)

现在有一个类(当然结构就不用说了):
class EXP
{
public:
int a;
int b;
char c;
int d;

void showme() {printf("in EXP now\r\n");}
};

如果现在要调用EXP::showme的话不能直接用采用常规方法,用EXP::showme来调,我也不想先实例化一个对象,然后通过对象来调,那么可以
这样做:
((EXP *)0)->showme();

呵呵,当然了,showme不能引用类中的任何成员变量,否则后果会很严重喔。
仔细看一下showme的定义调用方法,是不是有点意思呢?
...全文
114 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iambic 2007-11-06
  • 打赏
  • 举报
回复
有意思,接分。
骆玉珠 2007-11-06
  • 打赏
  • 举报
回复
接楼主:
不实例化一个类直接调用成员函数的两种方式


#include<iostream.h>
#include<stdio.h>

#include<iostream.h>
#include<stdio.h>

class EXP
{
public:
int a;
int b;
char c;
int d;

void showme(){printf( "in EXP now\r\n ");}
static void get(){cout<<"aa"<<endl;}
};

void main()
{
((EXP *)0)->showme();//强制转换
reinterpret_cast<EXP *>(2)->showme();//强制转换
EXP::get();//直接调用静态成员函数
}
  • 打赏
  • 举报
回复
只要不关this指针,干啥都行.
0黄瓜0 2007-11-06
  • 打赏
  • 举报
回复
showme不能引用类中的任何成员变量,否则后果会很严重喔.

都上楼主说了,纯接分.
lenux 2007-11-06
  • 打赏
  • 举报
回复
呵呵,是挺有意思的。复习一下
bendise 2007-11-06
  • 打赏
  • 举报
回复
好难读,看不懂
飞哥 2007-11-06
  • 打赏
  • 举报
回复
公说公有理,婆说婆有理
我看都有理


64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧