目录

多继承与虚继承以及存在的问题

例子


多继承与虚继承以及存在的问题

虚继承

有了多继承,虚继承才会有意义

如果有个菱形结构的继承,爷爷类为A,然后B,C是A的派生类,最后D是B和C的派生类,
如果在A中有一个成员变量a,D去调用就会出现访问不明确,

虚继承就可以解决访问不明确的这种问题
如果这样继承B,C虚继承了A,virtual public,然后D继承B,C

通常的理解方式!
在虚继承之后,A里面的成员变量a是不复制给B和C的,而是只给了B和C使用权,所以D也只有使用权

多继承,虚继承不建议用,结构复杂,内存开销比较大。
用菱形的结构简单的就可以了,可读性比较好

这里的A叫做虚基类

例子

采用多继承,会出现访问不明确的问题。

如下代码:

#include <iostream>
using namespace std;class A{public:A(){m_valueA = 0;}int m_valueA;void print(){cout << "class A print() called!" << endl;}
};class B: public A{};class C: public A{};class D: public B, public C{};int main(){D d;cout << d.m_valueA << endl;getchar();return 0;
}

运行报错截图如下:

此时采用虚继承就能很好的解决这个问题:

代码如下:

#include <iostream>
using namespace std;class A{public:A(){m_valueA = 0;}int m_valueA;void print(){cout << "class A print() called!" << endl;}
};class B: virtual public A{};class C: virtual public A{};class D: public B, public C{};int main(){D d;cout << d.m_valueA << endl;getchar();return 0;
}

运行截图如下:

C++多继承与虚继承相关推荐

  1. C++ 多继承和虚继承的内存布局

    原文链接:https://www.oschina.net/translate/cpp-virtual-inheritance 警告. 本文有点技术难度,需要读者了解C++和一些汇编语言知识. 在本文中 ...

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

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

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

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

  4. C++继承机制(三)——多继承、菱形继承、虚继承原理

    目录: C++继承机制(一)--基本语法.三种继承方式.继承哪些数据 C++继承机制(二)--继承中的构造和析构顺序.继承同名成员的处理方式 C++继承机制(三)--多继承.菱形继承.虚继承原理 本篇 ...

  5. C++对象模型:单继承,多继承,虚继承

    什么是对象模型 有两个概念可以解释C++对象模型: 语言中直接支持面向对象程序设计的部分. 对于各种支持的底层实现机制. 类中成员分类 数据成员分为静态和非静态,成员函数有静态非静态以及虚函数 cla ...

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

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

  7. C++57个入门知识点_50 菱形继承与虚继承(C++中语法允许多重继承造成菱形继承;会造成近亲结婚的问题;可以通过虚继承的方式解决;实际项目中不多用多重继承)

    上篇C++57个入门知识点_49 多重继承与组合(一个类同时具有多个类的属性的方法:多重继承或者组合:多重继承:一个类同时继承多个类:多重继承构造和析构的顺序与普通继承类似:组合:类中包含多个成员对象 ...

  8. C++普通继承和虚继承详解

    继承 继承概念 所谓的继承就是一个类继承了另一个类的属性和方法,这个新的类包含了上一个类的属性和方法,被称为子类或者派生类,被继承的类称为父类或者基类. 继承特点 子类拥有父类的所有属性和方法(除了构 ...

  9. C++菱形继承与虚继承

    菱形继承 菱形继承引入的问题 菱形继承的解决 虚继承的逻辑 菱形继承 不合理的地方 查看类布局的方式:使用命令 cl 菱形继承的构造 虚继承 虚基类 虚继承构造 虚继承的作用 菱形继承引入的问题 造成 ...

最新文章

  1. [转载]Python方法绑定——Unbound/Bound method object的一些梳理
  2. [蓝桥杯][2015年第六届真题]密文搜索(排序+二分)
  3. 没找到rpm命令_Mysql的命令总结和PyMysql
  4. 江民杀毒软件KV网络版反病毒整体解决方案──金融行业
  5. 西南科技大学城市学院计算机专科,西南科技大学城市学院官网
  6. 【干货贴】消息队列如何利用标签实现消息过滤
  7. NMEA码详解【转】
  8. vf更改当前路径_这份 window.location 备忘单,让你更有条理解决地址路径问题!...
  9. 「LibreOJ β Round #4」多项式 (广义欧拉数论定理)
  10. struts2+spring的两种整合方式
  11. 【读书笔记】IOS帝国-Apple Ⅱ/Mac/皮克斯/iPod/iTunes/iPhone/App Store/iPad,苹果教父:史蒂夫·乔布斯传_2020.02.15
  12. 论文中的Matlab画图常用技巧
  13. Tomcat Get请求中文乱码
  14. 管中窥豹SPDK RBD bdev 模块
  15. 《私募股权基金投资基础知识》---第六章
  16. 思科防火墙解析(ASA)
  17. matlab 边缘检测 抠图,ps如何调整边缘的流程:边缘检测、调整边缘、输出(调整边缘抠图...
  18. html字体外围有黄色边框,input或textarea在chrome、safari浏览器点击获得焦点时出现黄色边框去掉的方法...
  19. python爬取高匿代理IP(再也不用担心会进小黑屋了)
  20. 什么是盒模型(标准盒模型,怪异盒模型)

热门文章

  1. Ubuntu下Apache反向代理设置
  2. 可视化大屏设计指南,附20份可直接套用的实用模板
  3. 在IT行业对专业知识的掌握能力
  4. 好的飞鸽传书2007对于对外的API
  5. 北妈是谁、谁是北妈?他为何如此帅?
  6. 计算机集数控技术文献,数控技术
  7. 10038 mysql,关于MySql 10038错误的完美解决方法(三种)
  8. bean json转kotlin_Android--------kotlin插件神器Json直接生成javaBean
  9. Caret模型训练和调参更多参数解读(2)
  10. 送书 | 数据分析如烹小鲜