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的布局相关推荐

  1. vs开发人员命令查看C++类 data member 内存布局

    C++中类的数据成员在内存中时如何分布的,有继承,虚拟继承等情况下又是怎么分布的?在VS编译器中可以查看. 源代码如下: #include<iostream> using namespac ...

  2. 深度探索C++ 对象模型(7)-Data member的布局(虚继承)

    虚拟继承 namespace ObjectMultiDerived {class Point2d {public:// has virtual functionsvirtual void print( ...

  3. 深度探索C++ 对象模型(7)-Data member的布局(多重继承)

    多重继承 namespace ObjectMultiDerived {class Point2d {public:// has virtual functionsvirtual void print( ...

  4. 深度探索C++ 对象模型(7)-Data member的布局(无继承、继承无多态、继承多态、多层继承)

    无继承 继承无多态 继承多态 虚表 : 用来存放基类的每一个虚函数,再加上首位的一个slots(支持RTTI). 每个class object导入一个vptr,提供执行期的链接,使得每一个class ...

  5. c++Data Member的绑定

    Data Member的绑定 Data Member的绑定 Data Member的布局 Data Member的存取 继承与Data Member 含多态的继承 多重继承 虚继承 指向Data Me ...

  6. 继承与 Data Member(2)

    加上多态的情况 如果我要处理一个坐标点, 而不在意这是一个 Point2d 或 Point3d 实例, 那么就需要在继承关系中提供一个 virtual function 接口: class Point ...

  7. Data Member 的存取

    考察以下代码: Point3d origin; origin.x = 0.0; 此例中 x 的存取成本是什么? 答案则是视 x 和 Point3d 而定(别打脸, 我知道这是废话). 具体的呢? 因为 ...

  8. 深度探索C++ 对象模型(6)-Data member的存取

    nonstatic data member 需要在class object起始地址加上该member的偏移. class A {public: int x; int y;}; A a; a.y = 0 ...

  9. 深度探索C++ 对象模型(6)-Data member的绑定

    防御性程序设计 1).将class声明起头处放data member; 代码示例: class Point3d{ float x,y,z; public://etc } 2). class的声明处放i ...

  10. Data Member 的绑定

    考察以下代码: extern float _x;//user code class Point3d { public:Point3d(float, float, float);//问题来了, 是哪一个 ...

最新文章

  1. ASP.NET Core -中间件(Middleware)使用
  2. 机器学习手动撸代码系列3-感知机
  3. adf开发_了解ADF生命周期中的ADF绑定
  4. 造完家怎么拆东西_吸顶灯灯管怎么拆?吸顶灯拆灯管的注意事项有哪些?
  5. 如何运行自动 Mac 清理
  6. moongose模糊查询相关博客
  7. 打印流(PrintStream)_概述和使用
  8. 【你好,windows】Windows 7 X64旗舰纯净版版(NVME和USB3.0集合总裁万能网
  9. java 使用POI导入复杂excel表格
  10. 制作拨号服务器,如何打造全自动的拨号上网服务器
  11. Python新手入门指导
  12. 比微信还方便,一键导出你与 ChatGPT 的聊天记录,而且是 Markdown 格式!
  13. 计算机英语 教学大纲,计算机英语教学大纲
  14. VUE页面背景设置为视频
  15. 开源项目eladmin--笔记
  16. easyrecovery15中文版一键批量恢复数据软件
  17. ftp-主动模式(PORT)和被动模式(PASV)
  18. 连接安装在阿里云服务器的Zookeeper
  19. 前端明水印到隐水印你了解了吗
  20. 互联网公司裁员,中年失业找不到工作,大龄程序员的出路在哪里?

热门文章

  1. windows环境下kafka源代码开发环境搭建
  2. Quick BI 支持多种数据源进行多维分析 1
  3. Vue学习计划基础笔记(六) - 组件基础
  4. 【CSS系列】获取实时数据做进度
  5. 【CentOS7】服务环境搭建
  6. 基于Linux平台Softimage XSI 演示
  7. 利用遗传算法求解旅行商问题
  8. php monolog 使用,PHP 依赖工具 monolog的使用
  9. matlab中emd未定义,EMD的Matlab程序
  10. manage key mysql_mysql相关操作