继续上文,看看继承类的大小

1. Bear类

类对象的大小为24: 16+8

class Bear : public ZooAnimal {
public:Bear() {};~Bear() {}; void rotate() {};virtual void dance() {};
protected:enum Dances { }; Dances dances_known;int cell_block;
};Bear b;
ZooAnimal *pz = &b;
Bear *pb = &b;
Bear &rb = *pb;

测试代码:

void test_Bear()
{cout << "Bear对象的内存大小:" << sizeof(Bear) << endl;
}


2. Panda类

class  Panda: public Bear {
// ........
};

声明对象

 ZooAnimal za;ZooAnimal *pza;Bear b;Panda *pp = new Panda;...pza = &b;
};

对象的大小如下图:

3. c++通过对象的refrence和指针来支持多态

  • 更改对象的值:
    Bear b;
    ZooAnimal za = b; // 会引起切割

  • 更改指针的值:
    pz->cell_block;                          // 不合法
    ((Bear*)pz)->cell_block;           // 合法
    dynamic_cast<Bear*>(pz)->cell_block; // 合法,效率更低
    pb->cell_block;                         // 合法

总结 :对象和指针的真正意思是它的内存大小(在地址固定的情况下)

【引用】
[1]<<深度探索C++ 对象模型 Inside The C++ Object Model >> Stanley B.Lippman 候捷 译
[2] 代码地址 https://github.com/thefistlei/cplusStudy.git

深度探索C++ 对象模型(2)-类的对象的内存大小_2相关推荐

  1. 深度探索C++ 对象模型(2)-类的对象的内存大小

    1. Question: 32bit机器 1个指向地址1000的指针的大小是多少? 指针类型 涵盖地址空间 整数指针 1000~1003(32bit整数是4-bytes) void*指针 不确定 2. ...

  2. 《深度探索C++对象模型》--1 关于对象

    1.封装成本 与C比较,在virtual没有参与的情况下,C++的封装没有增加成本.C++在布局以及存取时间上的主要而外负担是由virtual引起的.包括:virtual function机制和vir ...

  3. 深度探索C++对象模型第2章 构造函数语义学

    默认构造函数 两个误区: 1 任何class如果没有定义默认构造函数,就会被合成一个出来:只有在某些情况下被合成 2 编译器合成出来的默认构造函数会明确设定class中每一个数据成员的默认值 :默认值 ...

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

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

  5. 深度探索C++ 对象模型(5)-Initialization list(1)

    以下四种情况,一定要使用成员初始化列表: 1.初始化一个引用成员 2.初始化一个const成员 示例代码为 class Shape{const int m_size; //const 常量int &a ...

  6. 深度探索C++ 对象模型(4)-Default Copy Constructor(2)

    没有Default Constructor, class Myclass{ public://... private:int a;char *str; }; 编译器执行的是"位逐次拷贝(Bi ...

  7. 深度探索C++ 对象模型(3)-默认构造函数Default Constructor

    1. Default Constructor只对base class subobjects和member class objects初始化,对data member不做操作 2. 编译器构造Defau ...

  8. 深度探索C++ 对象模型(1)-三种对象模型的设计

    1.类的成员 数据成员 . Static . Nonstatic 成员函数 . Static . Nonstatic . virtual Questions: C++封装带来的布局成本是多大? 由空类 ...

  9. 《深度探索C++对象模型(Inside The C++ Object Model )》学习笔记

    来源:http://dsqiu.iteye.com/blog/1669614 之前一直对C++内部的原理的完全空白,然后找到<Inside The C++ Object Model>这本书 ...

最新文章

  1. c#_winform_选择文件保存路径
  2. Matlab画图-非常具体,非常全面
  3. git学习(6):删除github镜像
  4. Can‘t find a suitable configuration file in this directory or any parent. 报错解决错误
  5. EasyUI TextBox的onkeypress事件
  6. java并发编程基础 --- 4.2 线程的优先级
  7. 洛谷2501 BZOJ1801中国象棋题解
  8. Python(七):输入输出(IO)、文件读写
  9. RdViewer(远程控制电脑屏幕软件)官方中文版V3.3.1 | rd远程工具下载
  10. 三种查询IP归属地的接口
  11. mysql如何存入汉字_[MYSQL]如何导入汉字单字到数据库
  12. JAVA----动态初始化数组的null判断
  13. VS Code如何配置C\C++环境 步骤详解
  14. python *args和**kwds
  15. java堆栈、gc、dump文件在线分析
  16. Atitit 支出分类表 会计科目(1)资产(2)负债(3)资本(4)收益(5)费用(成本) 资产分类表 attilax总结...
  17. 梅敬成 三维CAD软件发展历程:过去,现在和未来 (ACIS,Parasolid,OCC, 中望OV,华天CRUX IV )
  18. 最小生成树-Prim算法详解(含全部代码)
  19. C++内存泄漏检测工具
  20. 【RPA进阶】 高级数据操作

热门文章

  1. jsp页面怎么调用的servlet
  2. 支付签约_与支付巨头万事达卡签约,金融服务集团FlexiGroup股价领涨
  3. wpf ui框架_RapidCAX 开源UI框架
  4. 汽车故障检测软件_汽车没故障,定期保养,为啥尾气检测通不过?老司机说出关键...
  5. 工信部通告:任何组织和机构不得继续实施“计算机信息系统集成企业资质认定”...
  6. 数据中心ECC值班长岗位提升工作总结
  7. 数据中心机房应该如何布线,机柜布线方法详解!
  8. 细数:数据中心机房对环境的严格要求有哪些?
  9. 干粉灭火器的维护保养
  10. CV:计算机视觉基础之图像存储到计算机的原理daiding