Für mehrfachvererbung braucht man nicht zwangsläufig virtuelle Basisklassen.
Erforderlich ist das ausschließlich dann wenn Basen indirekt mehrfach vorhanden wären.
Und eine Situation wie in deinem Beispiel gäbe es vielleicht bei der OOA, im OOD sähe das sicher etwas anders aus.
Aber mal zum Problem:
Grund für diesen Umstand ist eine Verallgemeinerte Handhabung bei der Mehrfachvererbung.
Bei der Einfachvererbung und der Merhfachvererbung ohne indirekte gemeinsame Basen, ist das ganze ziemlich gerade aus.
Würde man ein Diagramm zeichen, würde der Baum von Oben nach unten, von links nach rechts erstellt.
Der Aufruf der Initialisierer, geschiet jedoch von Unten nach oben.
Bei der Mehrfachvererbung gibt es jetzt jedoch zu viele Variablen. Zum einen bist du nicht auf zwei Basen beschränkt und zu m anderen hast du keinen schimmer wie die Basen wohl genau aussehen könnten, ob nun bestimmte klassen Indirekt mehrfach vorkommen oder nicht. Dazu kommt noch, das gemeinsamen Basen ja nicht immer nur so angeordnet sind wie in den Beispielen die man zur Demonstration so findet. Die eventuellen gemeinsamen Basen könnten ja auch auf mehrere Ebenen versetzt vorkommen odar gar auf der gleichen Linie(bei einer ausreichend großen Verzweigung).
Damit man dort nun eindeutig mit diesen gemeinsamen Basen vorgehen kann, wurde eben entschieden, dass virtuelle Basen prinzipiell zuerst erstellt werden sollten, unabhängig wo sie in der Hierarchie zu finden sind (damit alle von dieser Klasse abhängigen klassen auch ja auf die gleichen Daten zugreifen).
Doch wird durch dieses Verhalten die Kette der Initialisierer gebrochen. Daher entstand noch als Nebeneffekt,
dass alle Initialiserer virtueller Basen in der Hierarchie ignorriert werden und in die klasse verlagert werden,
die inder Hierarchie ganz unten ist. Eben die zuletzt erstellt klasse. DiePerson welche die erstellt ,wird am besten wissen wie die Hierarchie aussehen soll.
ass die letzte Klasse in der Hierarchy nicht unbedingt etwas von der darunter liegenden Hierarchy wissen muss
Jetzt mal unabhängig von diesem Vererbungsproblem, finde ich diese Aussage ein wenig seltsam.
Du musst nichst von der Implementierung der zu Grunde liegenden Hierarchie wissen,
doch wenn wir von Konstruktoren reden, reden wir von einem Bestandteil der Spezifikation (welche Größtenteils ja von der Programmierung unabhängig ist).
Und Spezifikikationen werden stets mitvererbt.
Das heißt, die Spezifikation der Basis ist neben der Ableitungseigenen, stets auch Spezifikation der Ableitung. Sie darf sich zwar aufweichen, wird vom Grundaufbau jedoch immer mitgetragen. Das heißt, wenn du wissen möchtest was du benötigst, schaust du dir einfach die Basen an von denen du ableitest, keine 10 Ebenen höher oder so.
Ob das nun schick ist oder nicht, dein Problem dabei verstehe ich jetzt irgendwie nicht.
Basen werden nicht prophilaktisch virtuell, das ist eine Designeentscheidung.
Und da Designeentscheidungen eine gewisse Planung voraussetzen, wirst du von vorneherein doch zu mindest abschätzen können ob eine virtuelle Ableitung nötig ist oder nicht. Und wenn sie es ist, wird auf kurz oder lang sowieso eine Mehrfachvererbung entstehen in der diese Klasse merhfach als Basis auftaucht.
Hier sei nochmal erwähnt, das Merhfachvererbung nicht zwangsläufig eine virtuelle Ableitung benötigt.