Mehrfache Vererbung ist nicht oft used in C++. In den meisten Fällen handelt es sich um eine Mischung aus Interface/Implementierung. Es ist auch nicht verboten. Die Notwendigkeit einer (virtuelle) Mehrfachvererbung kommt von Design-Entscheidungen von einer allgemeinen Basisklasse ableiten:
class Window
{ /* draw, show, hide, background ... */ };
class WindowWithBorder : public virtual Window
{ /* methods to manipulate/draw border ... */ };
class WindowWithMenu : public virtual Window
{ /* methods to manipulate/draw Menu ... */ };
class MyWindow : public WindowWithBorder, public WindowWithMenu
{ /* now it's your turn ... */ };
Diese rautenförmigen Vererbungsgraphen müssen von der Bibliothek Implementierer vorgesehen werden. Ohne virtual
gäbe es zwei Basis Window
Objekte, mit virtual
ist es nur eine, aber kein Singleton, da es viele Fenster geben kann.
Bibliotheken können oft (aber nicht in jedem Fall) avoid solche Situationen, z.B. durch Implementieren einer composite design pattern mit einer "fetten" Basisklasse durch Implementieren abstrakter Interface-Klassen oder durch Verwenden von Vorlagen mit Merkmalen/Richtlinien.
Ich würde empfehlen, das Kapitel über Klassenhierarchien in Bjarne Stroustrup The C++ Programming language zu lesen (ch. 15 in meiner 3. Ausgabe, ich lieh das Beispiel aus).
Was haben Sie über C++ - Programmierung gelesen? Mehrfache oder virtuelle Vererbung ist schwierig und sollte sehr oft vermieden werden. Und das Problem ist, dass eine Klasse D von B und C erbt. –
Nun, ich studiere es jetzt, ich hatte nur eine grundlegende Einführung. Ich wäre definitiv besser dran, wenn jemand ein einfaches Beispiel dafür geben könnte, warum man das eine oder das andere benutzt. Ich brauche keine komplizierten Fälle. nur einfache, typische Szenarien wären perfekt, in einem Satz. – Bober02
Ich muss sehr selten Mehrfachvererbung oder virtuelle Vererbung verwenden. Eine gute Regel ist, sie niemals zu benutzen. –