multiple-inheritance

___ qstntxt ___

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

    
___ answer13752638 ___

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.

    
___ qstnhdr ___ Virtuelle Vererbung, eine Klasse genug? ___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123multipherinitance ___ Ein Merkmal einiger objektorientierter Computerprogrammiersprachen, in denen eine Klasse Verhaltensweisen und Merkmale von mehr als einer Oberklasse oder Basisklasse erben kann. ___ tag123virtualinheritance ___ Die virtuelle Vererbung wird verwendet, um das Problem der gefürchteten Diamanten zu lösen, das mit der Mehrfachvererbung in C ++ verbunden ist. ___ answer13752551 ___

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.

    
___
2
Antworten

Warum ist der Diamant des Todes und nicht das Dreieck des Todes [duplizieren]

Ich habe viele Beispiele gesehen, die die Gefahr der Mehrfachvererbung illustrieren. Das Beispiel ist normalerweise wie Klasse B und C erweitert Klasse A, Klasse D erweitert B und C. B und C überschreiben beide eine Methode von A, sagen...
15.05.2013, 05:45
0
Antworten

Die Darstellung von Alexandrescu über die Schwächen der Mehrfachvererbung verstehen [geschlossen]

UPDATE: Ich habe eine engere Frage gestellt hier . Auf den Seiten 6-7 von Modernes C ++ Design gibt Andrei Alexandrescu eine sehr grundlegende Diskussion über die Stärken und Schwächen von zwei C++ Sprachfunktionen - Mehrfachvererbung...
13.09.2015, 12:18
2
Antworten

CodeIgniter Erweiterung mehrerer Controller?

Kann einen Weg nicht finden, möglicherweise weil es einen anderen Weg gibt, dies zu tun? Einige meiner Controller erweitern AdminLayout und einige von ihnen erweitern ModLayout, aber ich brauche diese Seiten auch, um einen LoggedIn Controller...
29.02.2012, 06:24
9
Antworten

Ein echtes Beispiel für die Verwendung der Schnittstelle im Zusammenhang mit Mehrfachvererbung

Ich versuche Interfaces zu verstehen, damit ich sie in meinen Programmen implementieren kann, aber ich kann mir nicht vorstellen, wie ich sie benutzen soll. Geben Sie mir auch einige von ihnen mit mehreren Vererbung in C #     
18.12.2009, 18:20
2
Antworten

Virtuelle Vererbung, eine Klasse genug?

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...
06.12.2012, 21:01