Plusieurs classes de base
Comme indiqué dans la rubrique Héritage multiple, une classe peut être dérivée de plusieurs classes de base. Dans un modèle d'héritage multiple (où les classes sont dérivées de plusieurs classes de base), les classes de base sont spécifiées en utilisant l'élément de syntaxe base-list (consultez la section Grammaire dans Vue d'ensemble). Par exemple, la déclaration de classe pour CollectionOfBook, dérivé de Collection et Book, peut être spécifiée :
// deriv_MultipleBaseClasses.cpp
// compile with: /LD
class Collection {
};
class Book {};
class CollectionOfBook : public Book, public Collection {
// New members
};
L'ordre dans lequel les classes de base sont spécifiées n'a pas d'importance sauf dans certains cas où les constructeurs et les destructeurs sont appelés. Dans ces cas, l'ordre dans lequel les classes de base sont spécifiées a une incidence sur ce qui suit :
L'ordre dans lequel l'initialisation du constructeur est exécutée. Si votre code repose sur la partie Book de CollectionOfBook à initialiser avant la partie Collection, l'ordre des spécifications est important. L'initialisation a lieu dans l'ordre dans lequel les classes sont spécifiées dans l'élément base-list.
L'ordre dans lequel les destructeurs sont appelés pour effectuer le nettoyage. Là encore, si un « élément » particulier de la classe doit être présent lorsque l'autre élément est détruit, l'ordre a une importance. Les destructeurs sont appelés dans l'ordre inverse des classes spécifiées dans l'élément base-list.
Notes
L'ordre de spécification des classes de base peut avoir une incidence sur la disposition de mémoire de la classe.Ne prenez aucune décision de programmation concernant l'ordre des membres de base en mémoire.
Lorsque vous spécifiez l'élément base-list, vous ne pouvez pas spécifier le même nom de classe plusieurs fois. Toutefois, il est possible qu'une classe représente plusieurs fois une base indirecte par rapport à une classe dérivée plusieurs fois.