class A { public: void eat(){ cout<<"A";} };
class B: virtual public A { public: void eat(){ cout<<"B";} };
class C: virtual public A { public: void eat(){ cout<<"C";} };
class D: public B,C { public: void eat(){ cout<<"D";} };
int main(){
A *a = new D();
a->eat();
}
ダイヤモンドの問題は理解していますが、上記のコードにはその問題はありません。
仮想継承はどのように問題を解決しますか?
私が理解していること:
私が言うA *a = new D();
と、コンパイラーは、型のオブジェクトを型D
のポインターに割り当てることができるかどうかを知りたがってA
いますが、たどることができる 2 つのパスがありますが、それ自体では決定できません。
では、仮想継承はどのように問題を解決するのでしょうか (コンパイラが決定を下すのに役立ちます)。