C++对象内存布局--①测试虚函数表属于类
测试1:同一个类的多个对象共享同一张虚函数表。
//虚函数表.cpp //2010年8月18日 //测试虚函数表,说明虚函数表属于类所有。同一个类的多个对象共享同一张虚函数表 //VS编译器 #include <iostream> using namespace std; class Base { public : Base(int a = 0):a(a) { cout << "Base::base()" << endl; } virtual ~Base() { cout << "Base::~Base" << endl; } virtual void show() { cout << "Base::show()" << endl; } private: int a; }; int main() { Base aobj(10); typedef void (__thiscall *fun)(void*pThis);//非常重要 int** p = (int**)&aobj; cout << "对象大小 = " << sizeof(aobj) << endl; cout << "虚函数表指针 = " << p[0] << endl; cout << "成员变量 a = " << p[1] << endl; cout << "通过指针调用虚函数表中的函数" << endl; ((fun)(p[0][1]))(p);//调用show函数 cout << endl << "测试同一个类的另一个对象" << endl; Base bobj(20); int** pp = (int**)&bobj; cout << "对象大小 = " << sizeof(bobj) << endl; cout << "虚函数表指针 = " << pp[0] << endl; cout << "成员变量 a = " << pp[1] << endl; cout << "通过指针调用虚函数表中的函数" << endl; ((fun)(pp[0][1]))(pp); system("pause"); return 0; } /* Base::base() 对象大小 = 8 虚函数表指针 = 0041C2B0 成员变量 a = 0000000A 通过指针调用虚函数表中的函数 Base::show() 测试同一个类的另一个对象 Base::base() 对象大小 = 8 虚函数表指针 = 0041C2B0 成员变量 a = 00000014 通过指针调用虚函数表中的函数 Base::show() 请按任意键继续. . . Base::~Base Base::~Base */