问题
C++ 是否允许一个类继承自多个父类?
C++ 支持编写多重继承的代码
一个子类可以拥有多个父类
子类拥有所有父类的成员变量
子类继承所有父类的成员函数
子类对象可以当作任意父类对象使用
多重继承的语法规则
多重继承的本质与单继承相同!
通过多重继承得到的对象可能拥有 "不同的地址" !!!
解决方案:无
多重继承可能产生冗余的成员
当多重继承关系出现闭合时将产生数据冗余的问题!!!
解决方案:虚继承
虚继承能够解决数据冗余问题
中间层父类不再关心顶层父类的初始化
最终子类必须直接调用顶层父类的构造函数
问题:
当架构设计中需要继承时,无法确定使用直接继承还是虚继承!!
多重继承可能产生多个虚函数表
需要进行强制类型转换时,C++ 中推荐使用新式类型转换关键字!!
解决方案:dynamic_cast
工程开发中的 "多重继承" 方式:
单继承某个类 + 实现 (多个) 接口
一些有用的工程建议
先继承一个父类,然后实现多个接口
父类中提供 equal() 成员函数
equal() 成员函数用于判断指针是否指向当前对象
与多重继承相关的强制类型转换用 dynamic_cast 完成
小结
C++ 支持多重继承的编码方式
多重继承容易带来问题
- 可能出现 "同一个对象的地址不同" 的情况
- 虚继承可以解决数据冗余的问题
- 虚继承使得架构设计可能出现问题
多继承中可以出现多个虚函数表指针
与多继承相关的强制类型转换用 dynamic_cast 完成
工程开发中采用 "单继承多接口" 的方式使用多继承
父类提供成员函数用于判断指针是否指向当前对象