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
*/
原文链接: https://www.cnblogs.com/cswuyg/archive/2010/08/20/1804069.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/14107
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!