一. 虚基类的声明:
1. 虚继承:
在以下类的定义层次中,Derived1与Derived2的对象将各自拥有一个基类子对象Base,类A作为Derived1与Derived2的派生类,将拥有2个基类子对象Base,一个存储在基类子对象Derived1中,另一个存储在基类子对象Derived2中,如果类A想使用两个基类子对象Base,这没问题,但是如果想共享同一个Base子对象,比如使用Base记录同一个状态,而不需要记录多个状态,上述常规继承就不能满足需求;
class Base {};
class Derived1 : public Base {};
class Derived2 : public Base {};
class A : public Derived1, public Derived2 {};
为了满足Derived1与Derived2共享同一个状态,使用虚继承机制:
虚继承是一种机制,类通过虚继承指出它希望共享其虚基类的状态,对于一个给定的虚基类,无论该类在派生层次中作为虚基类出现多少次,只继承一个共享的基类子对象,共享的基类子对象称为虚基类;
在派生列表的访问标号后使用关键字virtual可以指定通过虚继承派生,修改上述代码后,如下:
class Base {};
class Derived1 : public virtual Base {};
class Derived2 : public virtual Base {};
class A : public Derived1, public Derived2 {};