以下代码是钻石问题。虚拟继承解决了这种模糊性。
#include<iostream>
using namespace std;
class A {
public: void something(){cout<<"A"<<endl;}
};
class B: virtual public A
{
public: void something() {cout<<"B"<<endl;}
};
class C: virtual public A {
public: void something() {cout<<"C"<<endl;}
};
class D: public B, public C {
public: void something() {cout<<"D"<<endl;}
};
int main()
{
A *d = new D();
d->something();
}
答案 0 :(得分:1)
使用虚拟继承时,父类的成员在所有子类之间是共享,而不是为每个子类重复,因此实际上没有菱形。