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 alle virtual
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 AA
entsprechen alle virtuellen Vorkommen der Basisklasse B
im Klassengitter von AA
einem einzelnen Unterobjekt B
im Objekt vom Typ AA
und jedem anderen Vorkommen einer (nichtvirtuellen) Basisklasse B
im Klassengitter von AA
entspricht eins zu eins mit einem eindeutigen B
Unterobjekt innerhalb des Objekts vom Typ AA
. Bei der oben definierten Klasse AA
hat die Klasse AA
zwei Unterobjekte der Klasse B
: Z
s B
und die virtuelle B
gemeinsam von X
und Y
, wie unten gezeigt.
Tags und Links c++ multiple-inheritance virtual-inheritance