关闭

c++ 对象模型(二)

标签: c++对象模型
272人阅读 评论(0) 收藏 举报
分类:

《c++ 对象模型》讲到了,对于虚函数表指针的分布,直接截书中的图

先上代码

struct no_virts
{
	int d1;
	int d2;
};

class has_virts : public no_virts
{
public:
	int d3;
	virtual void foo() { printf("--- has_virts foo \n"); } 
};

void testMemObj()
{
	has_virts hv;
	hv.d1 = 111;
	hv.d2 = 222;
	hv.d3 = 333;

	//无论虚函数放在对象的哪个位置,对象中的虚函数表都是位于对象内存分布的顶端
	Fun pFunc = (Fun)*((int*)(*((int*)(&hv) + 0)) + 0); //foo方法 
	pFunc();

	int d1 = (int)*((int*)(&hv) + 1); //111
	printf("--- d1:%d\n", d1);
	int d2 = (int)*((int*)(&hv) + 2); //222
	printf("--- d2:%d\n", d2);
	int d3 = (int)*((int*)(&hv) + 3); //333
	printf("--- d3:%d\n", d3);
}




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    博客专栏
    个人资料
    • 访问:442962次
    • 积分:6751
    • 等级:
    • 排名:第3987名
    • 原创:242篇
    • 转载:27篇
    • 译文:0篇
    • 评论:125条
    座右铭

    忠于内心,修炼坚持

    --Wilker_Yun