Mehrere Basisklassen
Wie in Mehrfachvererbung beschrieben, können Klassen aus mehr als einer Basisklasse abgeleitet werden. In einem Mehrfachvererbungsmodell (in dem Klassen aus mehr als einer Basisklasse abgeleitet werden) werden die Basisklassen mithilfe des base-list-Grammatikelements angegeben (siehe Grammatikabschnitt unter Übersicht). Beispielsweise kann die Klassendeklaration für CollectionOfBook, abgeleitet von Collection und Book, angegeben werden:
// deriv_MultipleBaseClasses.cpp
// compile with: /LD
class Collection {
};
class Book {};
class CollectionOfBook : public Book, public Collection {
// New members
};
Die Reihenfolge, in der Basisklassen angegeben werden, ist nicht signifikant, außer in Fällen, in denen die Konstruktoren und Destruktoren aufgerufen werden. In diesen Fällen wirkt sich die Reihenfolge, in der Basisklassen angegeben werden, auf Folgendes aus:
Die Reihenfolge, in der die Initialisierung durch Konstruktoren stattfindet. Wenn Ihr Code darauf basiert, dass der Book-Teil von CollectionOfBook vor dem Collection-Teil initialisiert wird, ist die Reihenfolge der Spezifikation signifikant. Die Initialisierung erfolgt in der Reihenfolge, in der die Klassen in der base-list angegeben sind.
Die Reihenfolge, in der Destruktoren zur Bereinigung aufgerufen werden. Auch wenn ein bestimmter "Teil" der Klasse vorhanden sein muss, wenn der andere Teil beschädigt wird, ist die Reihenfolge relevant. Destruktoren werden in umgekehrter Reihenfolge der Klassen aufgerufen, die in der base-list angegeben sind.
Hinweis
Die Reihenfolge der Spezifikation der Basisklassen kann das Speicherlayout der Klasse beeinflussen.Treffen Sie keine Programmierentscheidungen, die auf der Reihenfolge der Basismember im Arbeitsspeicher basieren.
Wenn Sie die base-list angeben, können Sie denselben Klassennamen nur einmal angeben. Allerdings kann eine Klasse mehrmals eine indirekte Basis für eine abgeleitete Klasse sein .