虚基类作用:如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多份同名成员。在引用这些同名的成员时,必须在派生类对象名后增加直接基类名,以避免产生二义性,使其惟一地标识一个成员。
在一个类中保留间接共同基类的多份同名成员,这种现象是人们不希望出现的。
C++提供虚基类(virtual base class)的方法,使得在继承间接共同基类时只保留一份成员。
虚基类声明方式:
class 派生类名:virtual 继承方式 基类名
经过这样的声明后,当基类通过多条派生路径被一个派生类继承时,该派生类只继承该基类一次。
例如:
class A//声明基类A
{
…
};
class B :virtual public A //声明类B是类A的公用派生类,A是B的虚基类
{
…
};
class C :virtual public A //声明类C是类A的公用派生类,A是C的虚基类
{
…
};
注意:虚基类并不是在声明基类时声明的,而是在声明派生类时,指定继承方式时声明的。因为一个基类可以在生成一个派生类时作为虚基类,而在生成另一个派生类时不作为虚基类。
为了保证虚基类在派生类中只继承一次,应当在该基类的所有直接派生类中声明为虚基类。否则仍然会出现对基类的多次继承。