¿Cómo resuelve la herencia virtual la ambigüedad del "diamante" (herencia múltiple)?
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();
}
Entiendo el problema del diamante, y el código anterior no tiene ese problema.
¿Cómo exactamente la herencia virtual resuelve el problema?
Lo que yo entiendo: Cuando yo digoA *a = new D();
, el compilador quiere saber si un objeto de tipoD
se puede asignar a un puntero de tipoA
, pero tiene dos caminos que puede seguir, pero no puede decidir por sí mismo.
Entonces, ¿cómo resuelve el problema la herencia virtual (el compilador de ayuda toma la decisión)?