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

WCF-Klasse, die zwei Betriebsverträge in verschiedenen Serviceverträgen mit demselben Namen implementiert

Ich habe zwei Serviceverträge wie folgt erklärt: %Vor% Ich habe eine Klasse, die diese beiden Verträge umsetzt. Ich habe zwei Endpunkte für beide Verträge erstellt. Aber ich kann vom Client-Code aus nicht auf den Dienst zugreifen. Es zeigt e...
12.05.2010, 09:30
4
Antworten

Virtuelle Methoden für eine virtuelle Basisklasse

Etwas, das mich bezüglich der Vererbung virtueller Basisklassen verwirrt hat ... Gegeben die folgenden Klassen: %Vor% Wird das kompiliert? Wenn ja, was wäre das Ergebnis des folgenden Codes: %Vor%     
07.07.2011, 18:12
1
Antwort

Warum werden Klassen im MRO so bestellt?

Ich habe ein Problem mit dem Python MRO Für diesen Code: %Vor% Ich bekomme diese Ausgabe: (<class '__main__.A'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.E'>, <cl...
26.01.2017, 15:40
7
Antworten

Mehrfaches Vererbungsdesign in Java

Wie gehst du damit um, nur eine Vererbung in Java zu haben? Hier ist mein spezifisches Problem: Ich habe drei (vereinfachte) Klassen: %Vor% Dies ist, was ich als meine grundlegendste Implementierung betrachte, aber ich möchte andere Imple...
26.01.2010, 22:37
4
Antworten

Wann verwenden wir Ruby-Modul vs Klassenzusammensetzung verwenden?

Eine ähnliche Frage wurde schon früher gestellt, aber ich frage speziell nach der Verwendung von Komposition als Alternative zur Verwendung von Modul-Mixins. %Vor% Wenn ich eine Klasse "verwenden", aber nicht erben muss, würde ich sie einfac...
02.04.2013, 01:46
2
Antworten

Begrenzung der Mehrfachvererbung in C ++

Was ist die Grenze der Mehrfachvererbung in C ++? d. h. wie viele Klassen kann eine Klasse erben? Ist es implementierungsabhängig oder gibt es eine Beschränkung für die Anzahl der Klassen, von denen Sie in der Mehrfachvererbung erben können?   ...
05.12.2013, 16:26
1
Antwort

"&" oder ",": Was ist der Unterschied zwischen AT erweitert I1 & I2 und AT erweitert I1, I2

Mehrere generische Schnittstellentrennzeichen: "," oder "& amp;" Ich habe immer A<T extends I1, I2> benutzt, aber heute habe ich A<T extends I1 & I2> gesehen. Was ist der Unterschied zwischen diesen beiden Notationen?...
06.12.2012, 18:25
4
Antworten

Warum kann ich keine Vererbung verwenden, um eine Schnittstelle in C ++ zu implementieren? [Duplikat]

Unter Berücksichtigung dieser Objekte: %Vor% Ich frage mich, warum - compiler-weise - das folgende Objekt als abstrakt betrachtet wird: %Vor% Der Compiler lässt mich das nicht tun: %Vor% Visual Studio 2010 sagt:    'C': kann d...
10.05.2012, 12:16
3
Antworten

c ++ Mehrere Eltern mit demselben Variablennamen

%Vor% Was passiert hier? Wird die Variable zusammengeführt? Kann ich einen in genau wie, B :: var = 2, etc. aufrufen     
03.09.2012, 23:33
2
Antworten

C ++ Mehrfachvererbung - warum Sie nicht arbeiten?

Ich versuche, ein interessantes Problem mit Mehrfachvererbung herauszufinden. Das Großelternteil ist eine Interface-Klasse mit mehreren Methoden: %Vor% Dann gibt es abstrakte Klassen, die diese Schnittstelle teilweise vervollständigen....
03.05.2011, 02:27