前言:一个派生类只有一个基类,叫做单继承
一个派生类可以有两个或多个基类,叫做多继承

1、多继承

class D:public A,public B,public C
{public://类D中新增的成员
};

2、多继承中构造函数和析构函数
在多继承形式下的构造函数和单继承形式基本相同,就是在派生类的构造函数的初始化列表中调用多个基类的构造函数

class D:public A,public B
{public:D(形参):A(实参),B(实参){}};

3、多继承导致的二义性问题
当两个或者多个基类中有多个同名的成员时,如果直接访问,会产生命名冲突。
解决二义性有两个方法:
1)指明:在成员名字前面加类名和域解析法“::”

d.A::m_a;



2)虚继承
多继承是指从多个直接基类中产生派生类的能力,多继承的派生类中继承了使用父类的成员。

当一个派生类中保留间接基类的多份同名成员,会占用较多的存储空间,还会容易造成命名冲突。

为了解决多继承时的命名冲突和数据冗余问题,C++提出了虚继承,使得派生类中只保留一份间接基类的成员。

在继承方式前面加上关键字virtual,表示虚继承
被共享的基类称之为虚基类

4、虚继承时的构造函数
在虚继承中,虚基类都是由最终的派生类初始化的。换句话来说,也就是最终派生类的构造函数必须调用虚基类的构造函数。
对于最终的派生类来说,虚基类是间接基类,而不是直接基类。

在最终的派生类D中,除了调用B、C的构造函数,还要调用类A的构造函数。说明类D不仅要负责初始化直接基类B和C,还要初始化间接基类A的构造函数。


C++继承——多继承(二义性)相关推荐

  1. C++多继承中的二义性问题

        在C++中,派生类继承基类,对基类成员的访问应该是确定的.唯一的,但是常常会有以下情况导致访问不一致,产生二义性.     1.在继承时,基类之间.或基类与派生类之间发生成员同名时,将出现对成 ...

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

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

  3. 继承菱形继承问题及解决

    继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类.继承呈现了面向对象程序设 ...

  4. 2021-11-09 C++封装继承多态---继承语法、多态语法、文件操作(附代码理解)

    6 继承 6.1继承的基本语法 例如我们看到很多网站中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同,接下来我们分别利用普通写法和继承的写法来实现网页中的内容,看一下继承存在的意义 ...

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

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

  6. java 父类是抽象类 定义private的属性 子类继承_java继承、多态、接口、抽象类定义及应用...

    继承:关键字extends java 中继承是单继承 允许多个子类继承一个父类,不允许一个子类继承多个父类. 继承是继承父类的所有属性和方法,但并不是所有的属性和方法都可被子类调用: 子类继承父类是必 ...

  7. 菱形继承,多继承,虚继承、虚表的内存结构全面剖析(逆向分析基础)

    // 声明:以下代码均在Win32_Sp3   VC6.0_DEBUG版中调试通过.. 在逆向还原代码的时候,必须得掌握了菱形继承,多继承,虚继承虚函数的内存虚表结构.所以,这篇文章献给正在学习C++ ...

  8. java多态和继承_Java 继承与多态的深入理解

    Java 继承与多态的深入理解 1.  什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父 ...

  9. 借用构造函数 组合继承 拷贝继承 总结继承

    借用构造函数 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF ...

最新文章

  1. python控制结构(二)_Python程序控制结构---2
  2. 【Python】如何在文件夹里批量替换文本中的内容?
  3. Dev-C++ 5.11安装教程
  4. php函数的严格类型,严格模式
  5. 今年考了N3也不知道能不能过
  6. 【报告分享】2020“后浪”消费图鉴.pdf(附下载链接)
  7. (转载) 标准C中的字符串操作函数
  8. maven打包时把依赖的jar包打进去
  9. mysql主从同步开启后的iptables的设定问题
  10. steam授权_恐怖游戏爱好者的福音!十一月Steam上最值得玩的恐怖游戏
  11. Unity3D学习笔记——layer
  12. 内存碎片产生原因及解决方法
  13. Matlab:风向玫瑰图,我也行
  14. 外部世界如何访问容器? - 每天5分钟玩转 Docker 容器技术(37)
  15. Snapchat如何突出重围?
  16. 安卓模拟器错误: Could not open
  17. 什么是色彩管理,OPPO 全链路色彩管理全在哪?
  18. Java——nefu
  19. L1-040. 最佳情侣身高差(有坑点)
  20. ubuntu中切换窗口 alt+tab

热门文章

  1. 德国大众20亿欧元押宝中国电动车市场
  2. TDSQL新敏态引擎Online DDL技术原理
  3. 搭配Online:2020年指数投资攻略:核心+卫星策略!
  4. MySQL union 和 union all的区别
  5. 若系统无致命错误计算机将执行bios中的,计算机软件习题
  6. 企业招用竞业限制员工风险分析
  7. Nodejs入门(一)
  8. 51cto MySQL OCP认证精品班5期
  9. tensorflow 修复python无法直接运行py文件问题
  10. Self-Attentive 基于自注意力分类的非结构化日志异常检测