完全可以,构造顺序 A -> B -> C -> D
当然,D必须虚继承与B, C 不然你B,C虚继承与A是毫无意义的。
虚继承就是防止派生类出现重复模块。如果你D :public B, public C,D中将存在两个A模块,出现二义性
class A
{
public:
A(int a = 0)
{
m_a = a;
}
virtual ~A() {}
private:
int m_a;
};
class B : virtual public A
{
public:
B(int b = 0)
{
m_b = b;
}
virtual ~B() {}
private:
int m_b;
};
class C : virtual public A
{
public:
C(int c = 0)
{
m_c = c;
}
virtual ~C() {}
private:
int m_c;
};
class D : virtual public B, virtual public C
{
public:
D(int d = 0) : B(d) , C(d), A(d)
{
m_d = d;
}
virtual ~D() {}
private:
int m_d;
};
int main()
{
D d(10);
system("pause");
return 0;
}
能编过吗?
D 虚拟继承于B,C试试
public D: virtual public B,C。。。