#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();
}
Nie jestem pewien, czy to się nazywa problemem diamentowym, ale dlaczego to nie działa?Dlaczego nie ma dwuznaczności w tym wzorze diamentu?
Podałem definicję dla eat()
dla D
. Nie trzeba więc używać ani kopii B
ani C
(więc nie powinno być problemu).
Kiedy powiedziałem, a->eat()
(pamiętaj eat()
nie jest wirtualny), jest tylko jednym z możliwych eat()
zadzwonić, że od A
.
Dlaczego więc mogę dostać ten błąd:
'A' is an ambiguous base of 'D'
Co dokładnie ma na myśli A *a = new D();
do kompilatora ??
i
Dlaczego nie ten sam problem występuje podczas korzystania D *d = new D();
?
http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.9 – JRL