虚基类:
在多继承关系中,如果一个派生类的从两个父类那里继承过来,并且这两个父类又恰恰是从一个基类那里继承而来。
下面是一个例子:
#include <iostream>
using namespace std;
class Grandfather
{
public:
int key;
public:
};
class Father1:public Grandfather
{
};
class Father2:public Grandfather
{
};
class Grandson:public Father1,public Father2
{
};
int main()
{
Grandson A;
//A.key=9;
return 0;
}
为了方便形容,定义的四个类都很空,重点看继承关系即可。即Grandson类继承两个father类,会有两个key成员,这个时候如果试图使用这个key,注意已经声明为public类型,在主函数中试图赋值时候,会有“不唯一、模棱两可”的错误提示,即所谓的二义性问题发生。
所谓虚基类就是在继承的时候在继承类型public之前用virtual修饰一下 。比如还是这个例子,只需要父亲类在继承爷爷类的时候多加一个virtual,那么这个时候,派生类和基类就只维护一份一个基类对象。避免多次拷贝,出现歧义。
定义方法即在两个父亲类的派生时增加virtual的声明:
class Father1:virtual public Grandfather
class Father2:virtual public Grandfather