C++对象内存布局--②测试派生类跟基类的虚函数表

 测试2:父类虚函数表跟子类虚函数表是不同的。 

//派生类跟基类的虚函数表.cpp
//2010年8月18日
//测试说明,父类虚函数表跟子类虚函数表是不同的。理解C++对象的内存布局
//VS编译器
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////////////
class Base
{
public:
Base():b(
10)
{
}
virtual void show()
{
cout
<< "Base::show()" << endl;
}
private:
int b;
};
//////////////////////////////////////////////////////////////////
class Derived : public Base
{
public:
Derived():c(
20)
{
}
void show()
{
cout
<< "Derived::show()" << endl;
}
private:
int c;
};
//////////////////////////////////////////////////////////////////
int main()
{
Base a_obj;
int** p = (int**)&a_obj;
typedef
void (__thiscall *fun)(void*pThis);//非常重要//虚函数表指针->虚函数表->调用虚函数
((fun)(p[0][0]))(p);
cout
<< "虚函数表地址 = 0x" << p[0] << endl;
cout
<< "私有成员变量 = 0x" << p[1] << endl;

Derived b_obj;
int** pp = (int**)&b_obj;
((fun)(pp[
0][0]))(pp);//虚函数表指针->虚函数表->调用虚函数
cout << "虚函数表地址 = 0x" << pp[0] << endl;
cout
<< "私有成员变量 = 0x" << pp[1] << endl;
cout
<< "私有成员变量 = 0x" << pp[2] << endl;
system(
"pause");
return 0;
}
/*
Base::show()
虚函数表地址 = 0x0041C248
私有成员变量 = 0x0000000A
Derived::show()
虚函数表地址 = 0x0041C260
私有成员变量 = 0x0000000A
私有成员变量 = 0x00000014
请按任意键继续. . .
*/

 

posted on 2010-08-20 00:39  烛秋  阅读(1020)  评论(2编辑  收藏  举报