Più classi base
Come descritto in Ereditarietà multipla, una classe può essere derivata da più classi base. In un modello di ereditarietà multipla, dove le classi sono derivate da più classi base, le classi base sono specificate utilizzando l'elemento di grammatica base-list. Per ulteriori informazioni, vedere la sezione Grammatica in Panoramica. Ad esempio, la dichiarazione di classe per CollectionOfBook, derivata da Collection e Book, può essere specificata come segue:
// deriv_MultipleBaseClasses.cpp
// compile with: /LD
class Collection {
};
class Book {};
class CollectionOfBook : public Book, public Collection {
// New members
};
L'ordine in cui vengono specificate le classi base non è significativo, tranne in alcuni casi, quando vengono richiamati i costruttori e i distruttori. In questi casi, l'ordine in cui le classi base vengono specificate influisce su quanto segue:
L'ordine con cui viene eseguita l'inizializzazione per costruttore. Se il codice si basa sul presupposto che la parte Book di CollectionOfBook sia inizializzata prima della parte Collection, l'ordine di specifica è significativo. L'inizializzazione viene eseguita nello stesso ordine con cui vengono specificate le classi in base-list.
L'ordine con cui vengono richiamati i distruttori per eseguire la pulizia. Anche in questo caso, se una "parte" specifica della classe deve essere presente mentre l'altra parte viene eliminata, l'ordine è significativo. I distruttori vengono chiamati in ordine inverso, rispetto all'ordine di specifica delle classi in base-list.
Nota
L'ordine di specifica delle classi base può influire sul layout di memoria della classe.Non prendere decisioni relative alla programmazione in base all'ordine dei membri base nella memoria.
Nello specificare base-list, non è possibile specificare più volte lo stesso nome di classe. Tuttavia, è possibile che una classe costituisca più volte una base indiretta per una classe derivata.