虚函数求答!!!!!

yotta 2009-08-21 02:54:32
class Base { 

public:

virtual void f() { cout << "Base::f" << endl; }

virtual void g() { cout << "Base::g" << endl; }

virtual void h() { cout << "Base::h" << endl; }

};

void main(){

typedef void(*Fun)(void);

Base b;

Fun pFun = NULL;

cout << "虚函数表地址:" << (int*)(&b) << endl;

cout << "虚函数表 — 第一个函数地址:" << (int*)*(int*)(&b) << endl;

// Invoke the first virtual function

pFun = (Fun)*((int*)*(int*)(&b));

pFun();
}



实际运行经果如下:(Windows XP+VS2003, Linux 2.6.22 + GCC 4.1.3)

虚函数表地址:0012FED4

虚函数表 — 第一个函数地址:0044F148

Base::f




我想问的是 typedef void(*Fun)(void); 这个typedef void(*)是干嘛用的?
还有这个cout << "虚函数表地址:" << (int*)(&b) << endl;
cout << "虚函数表 — 第一个函数地址:" << (int*)*(int*)(&b) << endl;
里面(int*)加了有什么用啊,我去掉的话结果显示是一样的
...全文
123 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sou2012 2010-04-27
  • 打赏
  • 举报
回复
楼主居然发0蛋贴。。。
wzyzb 2009-08-24
  • 打赏
  • 举报
回复
恩 不同的编译器可能有不同的实现
yotta 2009-08-24
  • 打赏
  • 举报
回复
继续求答,谢谢
yotta 2009-08-21
  • 打赏
  • 举报
回复
嗯,这个是别人博客上的文章,是要买本书看看

这个虚表地址。。。。
cout << "虚函数表地址:" << *(int*)(&b) << endl;
是不是这样才是真正的地址啊
taodm 2009-08-21
  • 打赏
  • 举报
回复
怎么整天都是这么瞎搞虚表地址的帖子呀。
楼主还是买本《深度探索c++对象模型》吧。

64,439

社区成员

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

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