J'ai une question sur la classe de base virtuelle alors qu'après avoir lu cet article Une classe de base virtuelle est présentée pour surmonter le "redouté diamant de la mort" / problème d'ambiguïté dans l'héritage multiple.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
class A { public: void Foo() {} };
class B : public virtual A {};
class C : public virtual A {};
class D : public B, public C {};
Que se passe-t-il lorsqu'un mot-clé virtual n'est pas utilisé dans la déclaration de classe C. Pourriez-vous s'il vous plaît m'expliquer en détail?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
class A { public: void Foo() {} };
class B : public virtual A {};
class C : public A {};
class D : public B, public C {};