#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();
}
Tôi không chắc điều này được gọi là vấn đề kim cương hay không, nhưng tại sao nó không hoạt động?Tại sao có sự mơ hồ trong mẫu kim cương này?
Tôi đã hủy bỏ số eat()
cho D
. Vì vậy, nó không cần sử dụng bản sao của B
hoặc C
(vì vậy, sẽ không có vấn đề gì).
Khi tôi đã nói, a->eat()
(nhớ eat()
không phải là ảo), chỉ có một khả năng eat()
để gọi, đó là A
.
Tại sao sau đó, tôi nhận được lỗi này:
'A' is an ambiguous base of 'D'
chính xác không A *a = new D();
ý nghĩa gì với trình biên dịch ??
và
Tại sao cùng một vấn đề không xảy ra khi tôi sử dụng D *d = new D();
?
http://www.parashift.com/c++-faq-lite/multiple-inheritance.html#faq-25.9 – JRL