C++继承——多继承(二义性)
前言:一个派生类只有一个基类,叫做单继承
一个派生类可以有两个或多个基类,叫做多继承
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++继承——多继承(二义性)相关推荐
- C++多继承中的二义性问题
在C++中,派生类继承基类,对基类成员的访问应该是确定的.唯一的,但是常常会有以下情况导致访问不一致,产生二义性. 1.在继承时,基类之间.或基类与派生类之间发生成员同名时,将出现对成 ...
- C++ 面向对象(一)继承:继承、对象切割、菱形继承、虚继承、继承与组合
目录 继承 继承的概念 继承方式 基类与派生类的赋值转换 作用域与隐藏 派生类的默认成员函数 友元与静态成员 友元 静态成员 多继承 菱形继承 虚继承 继承和组合 什么是组合 如何选择组合和继承 继承 ...
- 继承菱形继承问题及解决
继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类.继承呈现了面向对象程序设 ...
- 2021-11-09 C++封装继承多态---继承语法、多态语法、文件操作(附代码理解)
6 继承 6.1继承的基本语法 例如我们看到很多网站中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同,接下来我们分别利用普通写法和继承的写法来实现网页中的内容,看一下继承存在的意义 ...
- php 魔术方法 多继承,day23:单继承多继承菱形继承__init__魔术方法
原文:https://www.cnblogs.com/libolun/p/13434675.html 单继承 关于继承的一些基本概念 1.什么是子类?什么是父类?如果一个类继承另外一个类,该类叫做子类 ...
- java 父类是抽象类 定义private的属性 子类继承_java继承、多态、接口、抽象类定义及应用...
继承:关键字extends java 中继承是单继承 允许多个子类继承一个父类,不允许一个子类继承多个父类. 继承是继承父类的所有属性和方法,但并不是所有的属性和方法都可被子类调用: 子类继承父类是必 ...
- 菱形继承,多继承,虚继承、虚表的内存结构全面剖析(逆向分析基础)
// 声明:以下代码均在Win32_Sp3 VC6.0_DEBUG版中调试通过.. 在逆向还原代码的时候,必须得掌握了菱形继承,多继承,虚继承虚函数的内存虚表结构.所以,这篇文章献给正在学习C++ ...
- java多态和继承_Java 继承与多态的深入理解
Java 继承与多态的深入理解 1. 什么是继承,继承的特点? 子类继承父类的特征和行为,使得子类具有父类的各种属性和方法.或子类从父类继承方法,使得子类具有父类相同的行为. 特点:在继承关系中,父 ...
- 借用构造函数 组合继承 拷贝继承 总结继承
借用构造函数 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF ...
最新文章
- python控制结构(二)_Python程序控制结构---2
- 【Python】如何在文件夹里批量替换文本中的内容?
- Dev-C++ 5.11安装教程
- php函数的严格类型,严格模式
- 今年考了N3也不知道能不能过
- 【报告分享】2020“后浪”消费图鉴.pdf(附下载链接)
- (转载) 标准C中的字符串操作函数
- maven打包时把依赖的jar包打进去
- mysql主从同步开启后的iptables的设定问题
- steam授权_恐怖游戏爱好者的福音!十一月Steam上最值得玩的恐怖游戏
- Unity3D学习笔记——layer
- 内存碎片产生原因及解决方法
- Matlab:风向玫瑰图,我也行
- 外部世界如何访问容器? - 每天5分钟玩转 Docker 容器技术(37)
- Snapchat如何突出重围?
- 安卓模拟器错误: Could not open
- 什么是色彩管理,OPPO 全链路色彩管理全在哪?
- Java——nefu
- L1-040. 最佳情侣身高差(有坑点)
- ubuntu中切换窗口 alt+tab