L'ereditarietà singola è facile da implementare. Ad esempio, in C, l'eredità può essere simulato come:Come viene implementata l'ereditarietà multipla di C++?
struct Base { int a; }
struct Descendant { Base parent; int b; }
Ma con l'ereditarietà multipla, il compilatore deve disporre più i genitori all'interno della classe di nuova costruzione. Com'è fatto?
Il problema che vedo sorgere è: i genitori dovrebbero essere organizzati in AB o BA, o forse anche in altro modo? E poi, se faccio un cast:
SecondBase * base = (SecondBase *) &object_with_base1_and_base2_parents;
Il compilatore deve considerare se modificare o meno il puntatore originale. È necessario qualcosa di complicato con i virtual.
http://en.wikipedia.org/wiki/Diamond_problem – Dario
La simulazione C dimentica il puntatore VTable (dettaglio implementazione). –
@Dario: questo articolo tratta dei problemi di sovraccarico dell'ereditarietà multipla ma non contiene nulla sul layout degli oggetti e sulla fusione degli oggetti in C++. – mmmmmmmm