Virtuelle Vererbung, eine Klasse genug?

7

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

    
Invalid 06.12.2012, 21:01
quelle

2 Antworten

11

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.

    
Billy ONeal 06.12.2012, 21:06
quelle
7

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.

    
Ed Heal 06.12.2012 21:11
quelle