在说明虚基类之前,不得不提多重继承(MI)的概念。C++是允许多重继承的存在的,但是多重继承会导致以下两个问题:
- 从两个不同基类继承 同名方法
从两个或更多相关基类那里继承同一个类的多个实例
对于二者都可以使用作用域运算法来限定要访问的类名,以此解决二义性。对于第二个问题,可以使用虚基类来解决。虚基类使得从多个类(它们的基类相同)派生出的对象只继承一个基类对象。虚基类使用方法:
//Worker被用作Singer和Waiter的虚基类,public和virtual顺序无所谓 class Singer:virtual public Worker{...}; class Waiter:public virtual Worker{...};
然后SingingWaiter被定义为
class SingingWaiter:public Singer, public Waiter{...};
现在而言,SingingWaiter只包含Worker对象的一个拷贝。因为这个时候SingingWaiter只使用了一个Worker子对象,因此可以使用对象。