c++ 对象模型(二)

原创 2015年11月21日 10:19:53

《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);
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++对象模型学习笔记(二)--默认构造函数

在文章开始之前,首先指出对于c++新手的两个常见的误解:    一、任何class如果没有定义default constructor,就会被合成出一个来。    二、编译器合成出来的default...

C++对象模型(二):The Semantics of Copy Constructors(拷贝构造函数之编译背后的行为)

本文是 Inside The C++ Object Model's Chapter 2  的部分读书笔记。 有三种情况,需要拷贝构造函数: 1)object直接为另外一个object的初始值 2)ob...

《深入理解C++对象模型》读书笔记(二)

1、         静态成员函数特点:1、不能够直接存取非静态成员变量(因为静态成员函数不含有this指针);2、不能够声明为const、volatile或virtual;3、不需要通过类对象调用。...

C++对象模型 中文清晰版

  • 2015-08-31 15:12
  • 23.45MB
  • 下载

深入理解C++对象模型

  • 2015-07-20 16:01
  • 13.84MB
  • 下载

[读书笔记] 深入探索C++对象模型-第三章 Data语义学(下)

整理第三章最后的部分内容,关于数据成员指针的,之前竟然没听过类数据成员指针一说,果然路漫漫其修远兮啊。 注:以下例子和图片来源于原书。 1. 数据成员指针是指指向类数据成员的指针,其内容为对应数据成员...

深度探索C++对象模型

  • 2016-07-06 11:08
  • 15.93MB
  • 下载

C++类对象内存模型与成员函数调用分析(中)

2.4 虚拟成员函数这是本文中最复杂也最有趣的话题了。虚拟函数也是和继承这个话题相伴相生,所以本节将纳入对单继承、多重继承和虚拟继承,一起描述他们之间的关系,这样,对C++对虚拟函数的调用,以及由此所...

深度探索C++对象模型

  • 2015-11-25 10:09
  • 10.73MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)