必须使用关键字来限定每一个基类,不然编译器会默认成私有派生:
其实你不用看这仨奇葩类的
Worker?
从Singer和Waiter共有派生出SingingWaiter:
但这将出现二义性,因为Singing和Waiter都继承了一个Worker:
so..应该使用类型转换来指定对象:
虚基类
虚基类使得从多个类(他们基类相同)派生出的对象只继承一个基类对象.例如:在类声明中使用关键字virtual,可以使Worker被作用Singer和Waiter的虚基类:
然后 SingingWaiter可以定义为:
现在SingingWaiter类只有一个Worker对象副本了,Singer和worker共享一个Worker对象,所以现在可以使用多态了.
新的构造函数规则
使用虚基类时,构造函数需要使用一种新的方法,这是因为C++在基类是虚的时,禁止信息通过中间自动传递给基类,编译器在这时会使用基类的默认构造函数.
|
|
使用虚基类时我们必须显示调用构造函数:
对于非虚基类,显示调用Worker(const Worker&)是非法的
哪个方法?
那么问题来了,我们打算在SingingWaiter中重定义Show方法,并用SingingWaiter对象调用继承的Show方法:
最好是使用模块化: