多重继承MI
多重继承
(MI)
就是继承多个基类来创建一个新类。多重继承会引起二义性和一些奇怪的问题,要像在
C
中避免少使用
goto
语句一样在
C++
中尽量避免使用
MI
。
1. 概述
是否有必要用多重继承是一个有争议性的问题。
使用多重继承的理由:
1)
可以从现有的多个不同的基类中继承它们的特征和行为;
2)
设计的需要。可以设计出更灵活实用的程序。
2. 接口继承
3. 实现继承
4. 重复子对象
5. 虚基类
子对象初始化顺序:
1)
所有虚基类子对象,按它们在类定义中从上到下、从左到右的顺序初始化;
2)
非虚基类按通常顺序初始化;
3)
所有的成员对象按声明顺序初始化;
4)
完整的对象的构造函数执行
6. 名字查找问题
如果基类和派生类有同名的成员函数,那么在调用这个成员函数时,若没有指定作类作用域运算符就默认优先查找到派生类的那个成员函数(也就是取最近的)。
7. 避免使用多重继承
回答以下两个问题判断是否需要使用继承:
1)
是否需要通过一个新类来显示两个类的公共接口?
2)
需要向上转换成两个基类类型吗?
如果任何一个问题回答不是,那么就可以而且应该避免使用多重继承。
推荐使用组合而不使用继承。
8. 扩充一个接口
哪里需要使用
MI
?:当必须能够将派生类向上转换为两个以上的基类类型。