class Grand
{
public:
int a;
Grand(int i)
{
}
};
class A:virtual public Grand //虚继承
{
public:
A(int i):Grand(i)
{
}
};
class A2 : virtual public Grand//虚继承
{
public:
A2(int k) :Grand(k) //虽然这里也要这样写,但是还是有C来初始化Grand
{
}
};
class B
{
public:
};
class C :public A, public A2,public B
{
public:
C(int i,int j,int k) :Grand(i),A(j),A2(k)//初始化
{
}
};
这里因为A和A2都虚继承了Grand,所以Grand成为了虚基类。
虚基类的影响在这里最后影响到C。
注意:要保证A和A2都要虚继承。
要虚继承的原因,A和A2都继承了Grand,这个时候相当于A和A2都含有了Grand类的成员,如果C再同时继承A和A2,那么这个时候C就相当于重复的包含了两次Grand类的成员,所以要保证C里只含有一份Grand类成员的话,那么解决办法就是A和A2同时虚继承Grand。
说明:因为现在只有一份Grand,那么带来的问题就是,这个Grand是由A还是A2来初始化呢?
所以,现在Grand是由C来初始化。即要在类C的构造函数初始化列表中初始化Grand。