多重继承与虚基类
2015-08-03 21:13
288 查看
多重继承(multiple inheritance,MI)。 MI可能会给程序带来很多问题,其中两个主要的问题是:从两个不同的基类继承同名方法;从两个或更多相关基类那里继承同一个类的多个实例。 虚基类 虚基类使得从多个类(它们的基类相同)派生出的对象只继承一个基类对象。通过使用关键字virtual。 例如,可以使Worker被用作Singer和Waiter的虚基类(virtual和public的次序无关紧要)。
class Singer : virtual public Worker {...}; class Waiter : virtual public Worker {...};
然后,可以将SingerWaiter类定义为:
class SingerWaiter : public Singer, public Waiter {...};
混合使用虚基类和非虚基类: 当基类是虚基类,派生类将包含基类的一个子对象;如果基类不是虚基类,派生类将包含多个子对象。当类通过多条虚途径和非虚途径继承某个特定的基类时,该类将包含一个表示所有的虚途径的基类子对象和分别表示各条非虚途径的多个基类子对象。 使用非虚基类时,如果类从不同的类那里继承了两个或更多的同名成员(数据或方法),则使用该成员名时,如果没有用类名进行限定,将导致二义性。但如果使用了虚基类,则不一定会导致二义性。这时,如果某个名称优先于(dominate)其它所有名称,则使用它时,即使不用限定符,也不会导致二义性。 派生类中的名称优先于直接或间接祖先类中的相同名称。
MI小结:
使用虚基类的原因:从虚基类的一个或多个实例派生而来的类将只继承一个基类对象。
有间接虚基类的派生类包含直接调用间接基类构造函数的构造函数,这对于间接非虚基类来说是非法的。
通过优先规则解决名称二义性。
相关文章推荐
- 【python】获取高德地图省市区县列表
- shell编程之正则表达式
- [2015hdu多校联赛补题]hdu5297 Y sequence
- 05_方法(重载)、数组(一维)[数组的初始化、遍历、求最值、逆序、查表]
- 如何清理photoshop cs6 被升级的烦人的adobe creative cloud组件
- 理解python函数传参机制
- Qt核心编程___集合类
- LeetCode Valid Anagram
- stm32中断与事件区别
- esxi 下vlan设置以及交换机trunk的问题
- 帝国建站系统中遇到的问题以及解决办法(1)
- MongoDB——主从复制&副本集
- [随笔]socket连接简单理解
- hdu5339&bestcoder(#49)a题
- Hdu 1241 Oil Deposits
- IC验证平台STE_V2.1之硬件设计
- Remove Element
- hdu1241详解 Java广搜搞定
- 黑马程序员——while语句+for语句+for嵌套练习-第3天
- Android项目导入出错