文章目录

  • 一、基本概念
  • 二、程序举例
    • 1. 虚继承
    • 2. 内在逻辑

一、基本概念

菱形继承是指存在两个子类继承自同一个基类,同时有子类继承这两个子类。

二、程序举例

1. 虚继承

使用虚继承可以解决菱形继承资源浪费的问题,因为有两个子类继承基类,子类对象调用两个父类作用域下属性时,会发生资源浪费,两个子类分别调用基类的构造函数,生成两份基类所含有的数据成员。用虚继承,只调用一次构造函数和析构,所以避免资源浪费。

#include <iostream>using namespace std;class Person
{public:int Age;
};class Gril : virtual public Person
{};class Boy : virtual public Person
{};class Child : public Gril, public Boy
{};int main()
{Child A;A.Gril::Age = 5;A.Boy::Age = 10;cout << A.Gril::Age << endl;cout << A.Boy::Age << endl;}
10
10

2. 内在逻辑

可以使用VS的开发者工具解释其内在逻辑。

虚继承时,虚基类指针vbptr指向虚基类表vbtable,虚基类表中存放的就是数据相对于虚基类指针的偏移,然后根据偏移找到数据。

C++总结笔记(八)—— 菱形继承相关推荐

  1. C++_类和对象_C++继承_菱形继承_或钻石继承_问题及利用虚继承解决该问题---C++语言工作笔记068

    然后我们再来看一下在c++继承中的,一个很好玩的内容, 菱形继承,又叫 钻石继承. 比如我们有个动物类,然后 羊继承了这个动物类,然后驼也继承了这个动物类, 然后,羊驼,通过多继承,继承了羊类和驼类, ...

  2. 多继承 , 组合 , 菱形继承 , 接口 , 抽象 , 鸭子类型

    一, 复习 属性的的正确存放位置:类中应该存储所有对象公共的内容对象中存储都是每个对象独有的(都不同) 初始化函数:给对象的属性赋初值 , 可以保证只要对象被创建就一定有相应的属性节省了重复代码绑定方 ...

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

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

  4. php 魔术方法 多继承,day23:单继承多继承菱形继承__init__魔术方法

    原文:https://www.cnblogs.com/libolun/p/13434675.html 单继承 关于继承的一些基本概念 1.什么是子类?什么是父类?如果一个类继承另外一个类,该类叫做子类 ...

  5. 钻石问题(菱形继承问题) 和虚继承

    在C++中,什么叫做钻石问题(也可以叫菱形继承问题),怎么避免它? 下面的图表可以用来解释钻石问题. 假设我们有类B和类C,它们都继承了相同的类A.另外我们还有类D,类D通过多重继承机制继承了类B和类 ...

  6. [转]c++之菱形继承

    前天和大学室友吃烧烤,其中谈到菱形继承的问题,突然发现脑中对这个几乎空白,所以晚上回来就上网搜了搜,言归正传,说到菱形继承,就要说到虚继承的概念,对于虚继承,就是为了解决从不同途径继承来的同名的数据成 ...

  7. 一次实现可以在某些场合替代菱形继承?

    前不久在C++板块请教过这样一个问题:"多个基类中相同的纯虚函数,只需在派生类中实现一次"是否是标准行为.这个问题直到现在我也还没能确定,不过我在VC2005.VC2008和g++ ...

  8. python编程语言继承_python应用:学习笔记(Python继承)

    学习笔记(Python继承)Python是一种解释型脚本语言,可以应用于以下领域: web 和 Internet开发 科学计算和统计 人工智能 教育 桌面界面开发 后端开发 网络爬虫 有几种叫法(父类 ...

  9. Java接口存在的意义以及如何解决菱形继承问题

    可以说接口存在的目的就是为了解决菱形继承问题.我们用例子来去讲解这个问题. 多重继承 最好的办法就是使用多重继承 新建一个宠物类,让猫和狗都去继承宠物类的属性和方法.但是这样就会导致一个问题.即菱形继 ...

最新文章

  1. NVIDIA FFmpeg 转码技术分析
  2. .NET程序性能的基本要领
  3. BERT模型从训练到部署全流程
  4. linux 用户态与内核态通信方式简介
  5. 第一章--第一节:环境搭建
  6. PAT甲级题目翻译+答案 AcWing(进位制)
  7. Computer - 电脑硬件知识
  8. 设计灵感|文字排版海报有多少种可能?
  9. JAVA中的“+”、“concat”和“append”
  10. [面试] C/C++语法(三)—— 字符串
  11. ios虚拟机安装(二)
  12. 基于组件技术的电子海图显示系统开发方法
  13. 年化收益率超50%的“白马股基金”,幕后操盘手终于找到了!
  14. 【2021全国高校计算机能力挑战赛C++题目】17.信息整理 某机房上线了一套系统,和每台计算机都相连,以便监控各计算机相关外设的运行状态。
  15. Java线程中的静态方法_Java多线程3:Thread中的静态方法
  16. spark系列-应用篇之通过livy提交Spark任务
  17. 神经网络正则化java_聊聊神经网络中的正则化
  18. 安卓恶意应用代码分析
  19. 一篇论文又是Major Revision
  20. cass 河流走向 符号_教你拥有专属CASS符号库

热门文章

  1. IOS-awakeFromNib和viewDidLoad
  2. Python线程指南 ---转自 http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html
  3. C#与.NET程序员面试宝典 1.3 投递简历
  4. Windows XP SP3?转自作者: 孤单的鸽子,  出处:天极yesky, 责任编辑: 袁绍龙
  5. java 线程之线程状态
  6. XAML中格式化日期
  7. TCP UDP HTTP 的关系和区别
  8. Java中forEach, 用来遍历数组
  9. 捕捉Entity framework 6的详细异常提示
  10. 使用SecureCrt远程登录Linux安装配置教程