此处懵懂。先占个地,懂了再来补充。
1、虚函数表
测试代码:
#include<iostream>
using namespace std;
class Base
{
public:
virtual void f()
{
cout << "void f()" << endl;
}
virtual void g()
{
cout << "void g()" << endl;
}
virtual void h()
{
cout << "void h()" << endl;
}
private:
int a;
int b;
};
typedef void(*pfunc)(void);
int main()
{
cout << sizeof(Base) << endl;
Base b;
cout << "对象b的起始地址:" << &b <<endl;
cout << "vtable 的起始地址:" << (int **)*(int*)(&b) << endl;
cout<<"vtable 中第0个函数的地址" << *((int **)*(int*)(&b)+0) << endl;
cout << "vtable 中第1个函数的地址" << *((int **)*(int*)(&b) + 1) << endl;
cout << "vtable 中第2个函数的地址" << *((int **)*(int*)(&b) + 2) << endl;
cout << "vtable 中第3个函数的地址" << *((int **)*(int*)(&b) + 3) << endl;
pfunc pf = (pfunc)*((int **)*(int*)(&b) + 0);
pf();
pf = (pfunc)*((int **)*(int*)(&b) + 1);
pf();
pf = (pfunc)*((int **)*(int*)(&b) + 2);
pf();
pf = (pfunc)*((int **)*(int*)(&b) + 3);
pf();
getchar();
return 0;
}