Data Member的布局
Nonstatic Data Member在class object中的排列顺序和其声明顺序一样,任何中间介入的static Data Member都不会被放入对象之中
VC会将虚函数指针 放在一个类对象的最开头
1.类
class Test
{public:int nX;int nY;};class Test1 : public Test
{static int g_nNum;
public:int nZ;
};
2.结果
Test1 a;int* p = (int*)&a;*p = 10;*(p + 1) = 20;*(p + 2) = 30;cout<<"Test " << sizeof(Test) << endl;cout << "Test1 " << sizeof(Test1) << endl;cout << a.nX<<endl;cout << a.nY << endl;cout << a.nZ << endl;
查看他们的offset和memory的值
Test1 a;printf("%p\n", &(a.nX));printf("%p\n", &(a.nY));printf("%p\n", &(a.nZ));printf("%d\n", &Test1::nX);printf("%d\n", &Test1::nY);printf("%d\n" ,&Test1::nZ);
注意区分
int Test1::*p1 = 0;
int Test1::*p2 = &Test1::nX;cout << p2 << endl;
p2输出的结果是0
以此来区分一个指向Data Member的指针 并没有指向一个第一个Member 和 一个指向Data Member的指针 指向了第一个Member
所以编译器在进行存取操作时候,经常要进行-1操作
Data Member的布局相关推荐
- vs开发人员命令查看C++类 data member 内存布局
C++中类的数据成员在内存中时如何分布的,有继承,虚拟继承等情况下又是怎么分布的?在VS编译器中可以查看. 源代码如下: #include<iostream> using namespac ...
- 深度探索C++ 对象模型(7)-Data member的布局(虚继承)
虚拟继承 namespace ObjectMultiDerived {class Point2d {public:// has virtual functionsvirtual void print( ...
- 深度探索C++ 对象模型(7)-Data member的布局(多重继承)
多重继承 namespace ObjectMultiDerived {class Point2d {public:// has virtual functionsvirtual void print( ...
- 深度探索C++ 对象模型(7)-Data member的布局(无继承、继承无多态、继承多态、多层继承)
无继承 继承无多态 继承多态 虚表 : 用来存放基类的每一个虚函数,再加上首位的一个slots(支持RTTI). 每个class object导入一个vptr,提供执行期的链接,使得每一个class ...
- c++Data Member的绑定
Data Member的绑定 Data Member的绑定 Data Member的布局 Data Member的存取 继承与Data Member 含多态的继承 多重继承 虚继承 指向Data Me ...
- 继承与 Data Member(2)
加上多态的情况 如果我要处理一个坐标点, 而不在意这是一个 Point2d 或 Point3d 实例, 那么就需要在继承关系中提供一个 virtual function 接口: class Point ...
- Data Member 的存取
考察以下代码: Point3d origin; origin.x = 0.0; 此例中 x 的存取成本是什么? 答案则是视 x 和 Point3d 而定(别打脸, 我知道这是废话). 具体的呢? 因为 ...
- 深度探索C++ 对象模型(6)-Data member的存取
nonstatic data member 需要在class object起始地址加上该member的偏移. class A {public: int x; int y;}; A a; a.y = 0 ...
- 深度探索C++ 对象模型(6)-Data member的绑定
防御性程序设计 1).将class声明起头处放data member; 代码示例: class Point3d{ float x,y,z; public://etc } 2). class的声明处放i ...
- Data Member 的绑定
考察以下代码: extern float _x;//user code class Point3d { public:Point3d(float, float, float);//问题来了, 是哪一个 ...
最新文章
- ASP.NET Core -中间件(Middleware)使用
- 机器学习手动撸代码系列3-感知机
- adf开发_了解ADF生命周期中的ADF绑定
- 造完家怎么拆东西_吸顶灯灯管怎么拆?吸顶灯拆灯管的注意事项有哪些?
- 如何运行自动 Mac 清理
- moongose模糊查询相关博客
- 打印流(PrintStream)_概述和使用
- 【你好,windows】Windows 7 X64旗舰纯净版版(NVME和USB3.0集合总裁万能网
- java 使用POI导入复杂excel表格
- 制作拨号服务器,如何打造全自动的拨号上网服务器
- Python新手入门指导
- 比微信还方便,一键导出你与 ChatGPT 的聊天记录,而且是 Markdown 格式!
- 计算机英语 教学大纲,计算机英语教学大纲
- VUE页面背景设置为视频
- 开源项目eladmin--笔记
- easyrecovery15中文版一键批量恢复数据软件
- ftp-主动模式(PORT)和被动模式(PASV)
- 连接安装在阿里云服务器的Zookeeper
- 前端明水印到隐水印你了解了吗
- 互联网公司裁员,中年失业找不到工作,大龄程序员的出路在哪里?