1. 先看 普通菱形继承
#include <iostream>
#include <string>
using namespace std;
class Animal {int a_age;
};
class Sheep :  public Animal {};
class Tuo :  public Animal {};
class SheepTuo : public Sheep, public Tuo {};
void test1() {cout << sizeof(Animal) << endl;  //4cout << sizeof(Sheep) << endl;   //4cout << sizeof(SheepTuo) << endl; //8
}
int main()
{test1();return 0;
}

使用vs提供的开发者命令行工具,位置在 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\Shortcuts, 打开切换到 cpp文件所在目录
cl /d1 reportSingleClassLayout类名 文件名
对象模型如下:

2 菱形继承 使用了虚继承 virtual 后的对象模型

#include <iostream>
#include <string>
using namespace std;
class Animal {int a_age;
};
class Sheep : virtual public Animal {};
class Tuo : virtual public Animal {};
class SheepTuo : public Sheep, public Tuo {};
void test1() {cout << sizeof(Animal) << endl;  //4cout << sizeof(Sheep) << endl;   //8cout << sizeof(SheepTuo) << endl; //12
}
int main()
{test1();return 0;
}

疑惑:

  1. C++ 在64位机器中 , 任何指针 占用的字节数都是四个字节吗?

C++ 菱形继承 的 对象模型01相关推荐

  1. 菱形继承和虚继承、对象模型和虚基表

    1.菱形继承(钻石继承):两个子类继承同一父类,而又有子类同时继承这两个子类.例如B,C两个类同时继承A,但是又有一个D类同时继承B,C类. 2.菱形继承的对象模型 class A { public: ...

  2. 继承和多态 3.0 -- 菱形继承

    单继承和多继承 C++的继承方式是支持单继承和多继承的,首先看一下代码,分清单继承和多继承 单继承 class A { public:int _a; };class B :public A { pub ...

  3. C++ 面向对象(一)继承:继承、对象切割、菱形继承、虚继承、继承与组合

    目录 继承 继承的概念 继承方式 基类与派生类的赋值转换 作用域与隐藏 派生类的默认成员函数 友元与静态成员 友元 静态成员 多继承 菱形继承 虚继承 继承和组合 什么是组合 如何选择组合和继承 继承 ...

  4. C++继承详解三 ----菱形继承、虚继承

    转载:http://blog.csdn.net/pg_dog/article/details/70175488 今天呢,我们来讲讲菱形继承与虚继承.这两者的讲解是分不开的,要想深入了解菱形继承,你是绕 ...

  5. C++ 继承 | 对象切割、菱形继承、虚继承、对象组合

    文章目录 继承 继承的概念 继承方式及权限 using改变成员的访问权限 基类与派生类的赋值转换 回避虚函数机制 派生类的默认成员函数 友元与静态成员 多继承 菱形继承 虚继承 组合 继承 继承的概念 ...

  6. c 语言中的菱形继承,C++中的菱形继承深入分析

    菱形继承 class Person { int _AA; }; class Student:public Person { int _BB; }; class Teacher :public Pers ...

  7. c/c++入门教程 - 2.4.6 继承、公共继承、保护继承、私有继承、virtual虚继承(概念、语法、方式、构造和析构顺序、同名成员处理、继承同名静态成员处理、多继承语法、菱形继承、钻石继承)

    目录 4.6 继承 4.6.1 继承的基本语法 4.6.2 继承方式 4.6.3 继承中的对象模型 4.6.4 继承中构造和析构顺序 4.6.5 继承同名成员处理方式 4.6.6 继承同名静态成员处理 ...

  8. 【C++】继承详解,菱形继承问题

    继承体系 概念 继承方式 赋值兼容规则 同名隐藏 子类对象的构造过程 菱形继承 概念 是面向对象程序设计是代码可以复用的最重要的手段,它允许程序员在保持原有的类的特性的基础下进行拓展,增加功能. 这样 ...

  9. C++之菱形继承与虚继承(含虚函数)

    面向对象的三大特征:封装,多态,继承 前面我们已经讲了继承的一些知识点,在这基础上,我们讲的时候再涉猎一些多态的只是. 下面我们先接着上次讲有虚函数的菱形虚继承 首先什么是虚函数.? 虚函数:在类里面 ...

最新文章

  1. linux NF NR实例,awk中使用NR和FNR的一些例子
  2. python 字典循环_Python字典遍历操作实例小结
  3. linux中offsetof与container_of宏定义
  4. select * 映射错误_高性能IO模型分析-浅析Select、Poll、Epoll机制(三)
  5. Git的使用(推荐命令行模式)
  6. 前端学习(2798):实现图片预览的效果
  7. c++笔试必考内容:const使用详解
  8. java split 正则_java split方法的实现 正则匹配
  9. CentOS6 安装Sendmail + Dovecot + Squirrelmail
  10. Squirrel Engine 曝漏洞,可导致攻击者入侵游戏和云服务
  11. 简单直观理解形态学中的开运算和闭运算
  12. C4D四视图切换及基本操作
  13. 自主安全国产虚拟化平台CNware
  14. EasyRecovery15可靠的数据恢复软件
  15. RGB888转换为RGB565原理及工具
  16. 这四本第四届橙瓜网络文学奖体育竞技分类前五的作品不能不看!
  17. portknocking(端口试探) demo
  18. 串口通信Serial
  19. switchport nonegotiate
  20. php聊天室禁言时间开发,聊天室技术(五) -- 指挥中心_PHP

热门文章

  1. CSS基础学习-15-1.CSS 浏览器内核
  2. express接受get数据
  3. CF1080F Katya and Segments Sets
  4. 这是一次 docker 入门实践
  5. 使用MJRefresh自定义下拉刷新,上拉加载动画
  6. 深入研究Clang(四) Clang编译器的简单分析
  7. More Effective C++ (运算符)
  8. asp.net(c#) 将dbf转换为xls或wps,并将数据的列名改成中文;并判断本机是否安装office2003,2007和wps2007,2010...
  9. css 控制溢出文本显示省略号效果
  10. 指定module_一个缺失已久的特性 — module模块