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

Virtuelle Vererbung und gefürchteter Diamant

Ich habe eine harte Zeit mit einem gefürchteten Diamantenproblem. Zur Erinnerung, hier ist die klassische Klassenhierarchie dieses Problems: %Vor% Um es zu lösen, besteht die Standardlösung darin, dass C1 und C2 virtuelle Vererbung verwenden...
05.04.2012, 10:39
2
Antworten

Wo soll ich die leere Basisklasse platzieren?

Ist die Reihenfolge, in der ich die Basisklassen aufliste, von Bedeutung, wenn eine davon leer ist und die andere nicht? %Vor% Beeinflusst die Reihenfolge die Fähigkeit des Compilers, die leere Basisklassenoptimierung anzuwenden?     
14.09.2011, 12:06
3
Antworten

Aufruf von Init für mehrere Elternklassen mit Super? [Duplikat]

Python-Vererbung? Ich habe eine Klassenstruktur (unten) und möchte, dass die Kindklasse __init__ beider Eltern aufruft. Ist das möglich "super" oder ist es nur eine schreckliche Idee? %Vor%     
04.11.2011, 17:01
8
Antworten

Alternative der Mehrfachvererbung in Java

Ich habe zwei Bohnen erstellt %Vor% Nun, wenn eine Klasse Backpage-bewusst ist, dann wird BackPageBean erweitert, oder wenn sie eine Art von Nachricht anzeigen muss, dann erweitert sie InformationMessageBean. %Vor% Jetzt ist das Problem...
24.06.2009, 13:26
4
Antworten

vb.net: Mehrfachvererbung in einer Schnittstelle

Ich stehe vor einem Problem in Bezug auf Mehrfachvererbung in VB.net: Soweit ich weiß, unterstützt VB.net die Mehrfachvererbung im Allgemeinen nicht, aber Sie können eine Art Mehrfachvererbung erreichen, indem Sie mit Schnittstellen arbeiten...
15.04.2011, 20:49
6
Antworten

Kann eine normale Klasse mehrere Schnittstellen implementieren?

Ich weiß, dass eine mehrfache Vererbung zwischen Schnittstellen möglich ist, z. B .: %Vor% Aber ist es möglich, dass eine reguläre Klasse von mehreren Interfaces wie folgt geerbt wird: %Vor% Ich habe versucht, das Problem zu googeln, abe...
21.01.2014, 16:22
8
Antworten

Mehrfachvererbung in Java

Java erlaubt keine Vererbung von mehreren Klassen (immer noch erlaubt es die Vererbung von mehreren Schnittstellen.), Ich weiß, dass es sehr viel mit dem klassischen Diamantproblem zusammenhängt. Aber meine Fragen sind, warum Java keine Mehrfach...
11.08.2009, 19:36
7
Antworten

Frage zur Multi-Vererbung in C ++?

Ich habe den folgenden Code: %Vor% Wenn es ausgeführt wird, gibt das Programm die Ergebnisse aus: %Vor% Ich verstehe es nicht. Warum unterscheidet sich die Adresse in Line 1 und Line 2 von Line 3 , während sowohl Student als auch...
18.05.2011, 11:43
7
Antworten

Warum abstrakte Klassen und Interfaces erstellen?

Nun, ich wollte fragen, was der Unterschied ist, aber es wurde schon beantwortet. Aber jetzt frage ich, warum haben sie diese Unterschiede gemacht? (Ich spreche hier über Java, ich weiß nicht, ob das auch für andere Sprachen gilt) Die beiden...
03.03.2010, 11:18
2
Antworten

C ++ erbt von mehreren Basisklassen mit demselben virtuellen Funktionsnamen

Ich habe diesen Code ausprobiert: %Vor% Bei Verwendung des kommentierten Teils ist es OK, aber wenn ich versuche, die Definitionen außerhalb der Klassendeklaration zu schreiben, meldet der Compiler Fehler. Ich benutze den MSVC11 Compiler, we...
23.08.2013, 08:36