#include <iostream>
using namespace std;
class A { public: void eat(){ cout<<"A";} };
class B: public A { public: void eat(){ cout<<"B";} };
class C: 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();
}
No estoy seguro de que esto se llame problema de diamante o no, pero ¿por qué no funciona?¿Por qué hay ambigüedad en este patrón de diamantes?
He dado la definición de eat()
para D
. Por lo tanto, no es necesario utilizar la copia de B
o C
(por lo tanto, no debería haber ningún problema).
Cuando dije, a->eat()
(recuerda eat()
no es virtual), sólo hay una posible eat()
a llamar, la de A
.
¿Por qué entonces, qué recibo este error:
'A' is an ambiguous base of 'D'
¿Qué significa exactamente A *a = new D();
al compilador ??
y
¿Por qué el mismo problema se produce cuando se utiliza D *d = new D();
?
http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.9 – JRL