虚函数表的问题。。。
#include <iostream.h>
typedef void(*Fun)(void);
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()
{
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();
}
输出结果两个地址不一样,为什么?虚函数表中第一个函数的地址不就是虚函数表的首地址么?
还有,我不是怎么很懂(int*)(*(int *)(&b)这句话。实力的地址用&取出后干吗要加一个(int*)?