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. AB1601中断的问题
  2. 启动hbase后hregionserver没有启动
  3. 性能测试中脚本怎么写_脚本在流程中的性能影响
  4. 数据结构课上笔记10
  5. python面向对象实现简易银行管理员页面系统【导入自定义模块】
  6. 爬虫-请求头处理模块
  7. Delphi 两种类的声明方法
  8. 在iOS项目中,这样才能完美的修改项目名称
  9. oraccle 索引管理
  10. linux没有找到可用磁盘,在Linux上,有没有一种更像python的方法来获取可用磁盘设备名的列表?...
  11. 关于performSelector调用和直接调用区别
  12. IIS 7 配置备份和还原
  13. mysql绘制er图教程_使用MySQLWorkBench绘制ER图
  14. 几种视频压缩标准简介
  15. MATLAB绘制折线图和散点图
  16. SpringBoot 发送邮件和附件(实用版)
  17. 内网渗透学习04——域内横向移动
  18. 8000字干货:那些很厉害的人是怎么构建知识体系的
  19. shopify上传商品价格怎么改美元美金$
  20. L84.linux命令每日一练 -- 第11章 Linux系统管理命令 -- rpm和yum

热门文章

  1. jquery 后代 children, find方法
  2. AsyncResult使用场景
  3. stream rabbit
  4. 三分钟上手openldap帐号系统
  5. Windows 下的 electron 开发笔记一
  6. apache和php结合、apache的默认虚拟主机
  7. 怎样快速的学习微信小程序
  8. Linux 文件权限、用户权限和用户组管理vim的一些基本使用技巧
  9. 特殊字符的html编码转化
  10. 异步和同步的机制问题