Wie löst die virtuelle Vererbung die Mehrdeutigkeit des „Diamanten“ (Mehrfachvererbung)?

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(); 
} 

Ich verstehe das Diamond-Problem, und der obige Code hat dieses Problem nicht.

Wie genau löst die virtuelle Vererbung das Problem?

Was ich verstehe Wenn ich sageA *a = new D();, der Compiler möchte wissen, ob ein Objekt vom TypD kann einem Zeiger vom Typ @ zugewiesen werdA, aber es gibt zwei Wege, denen es folgen kann, die es jedoch nicht selbst bestimmen kann.

Wie behebt die virtuelle Vererbung das Problem (hilft dem Compiler, die Entscheidung zu treffen)?

Antworten auf die Frage(7)

Ihre Antwort auf die Frage