Ich verstehe das Konzept der virtuellen Vererbung, aber ich konnte die Antwort nirgends finden. Nehmen wir an, Sie haben Klasse D, die Klasse B und C erbt. Sowohl B als auch C erben Klasse A. Sie könnten also B und C virtuell A erben lassen, um zwei Instanzen von A zu vermeiden. Aber müssen Sie virtuelle Vererbung an B und C angeben oder erstellt es bereits nur eine Instanz von A, wenn eine der beiden virtuell A übernimmt und die andere nicht?
Danke
Sie müssen die virtuelle Vererbung für B und C angeben, um ein A zu erhalten. Andernfalls "teilt" die Klasse, die keine virtuelle Vererbung verwendet, die Klasse A.
Dies kann einem ermöglichen, Folgendes zu haben:
Warum Sie das tun wollen, ist eine andere Sache.
Sie müssen alle %code% sein. Aus C ++ 11 10.1 [class.mi] / 7:
Eine Klasse kann sowohl virtuelle als auch nicht-virtuelle Basisklassen eines bestimmten Typs haben.
%Vor%Für ein Objekt der Klasse %code% entsprechen alle virtuellen Vorkommen der Basisklasse %code% im Klassengitter von %code% einem einzelnen Unterobjekt %code% im Objekt vom Typ %code% und jedem anderen Vorkommen einer (nichtvirtuellen) Basisklasse %code% im Klassengitter von %code% entspricht eins zu eins mit einem eindeutigen %code% Unterobjekt innerhalb des Objekts vom Typ %code% . Bei der oben definierten Klasse %code% hat die Klasse %code% zwei Unterobjekte der Klasse %code% : %code% s %code% und die virtuelle %code% gemeinsam von %code% und %code% , wie unten gezeigt.