Dies ist die typische Vererbung Diamant. Es tritt sogar in der Standardbibliothek auf, in der iostream sowohl von istream als auch von ostream stammt und beide von ios_base abgeleitet sind.
Es gibt verschiedene Probleme:
Wenn Vater eine virtuelle Methode hat und beide SON1 und Son2 es zu implementieren, es sei denn, Grandson es auch implementiert er es implementiert, die von SON1 und Son2 Methoden zu erklären hat.
Wenn Vater irgendwelche Datenmitglieder hat, würde Grandson sie zweimal bekommen.
In jedem Fall Vater hat eine V-Tabelle, so dass Sie scheinen, um 2 Kopien davon zu bekommen.
Die mittleren Klassen verwenden daher in der Regel virtuelle Vererbung, die heikel, aber effektiv bedeutet, dass nur die letzte Klasse der Basisklasse erhält. In diesem Fall ist Grandson selbst dafür verantwortlich, Vater zu konstruieren, und man nimmt an, dass er es "hat".
Es gibt weitere Probleme, die Sie beachten sollten, wenn Sie irgendwelche Zeiger werfen. Seien Sie besonders vorsichtig beim Gießen in und aus einem Hohlraum *.
Was genau meinen Sie mit "nicht legitim"? – Jon
Warum ist es nicht legitim? Siehe: http://www.parashift.com/c++faq-lite/multiple-inheritance.html#faq-25.8 (25.8 und 25.9) – badgerr
Illegate 'Son' ==' Bastard'? –