Initialiser des classes de base
Les classes de base directes sont initialisées à peu près de la même façon que les objets membres.Prenons l'exemple suivant :
// spec1_initializing_base_classes.cpp
// Declare class MyClass.
class MyClass
{
public:
MyClass( int rSize )
{
}
};
// Declare class DialogBox, derived from class MyClass
class DialogBox : public MyClass
{
public:
DialogBox( int rSize );
};
// Define the constructor for DialogBox. This constructor
// explicitly initializes the MyClass subobject.
DialogBox::DialogBox( int rSize ) : MyClass( rSize )
{
}
int main()
{
}
Notez que dans le constructeur pour DialogBox, la classe de base d' MyClass est initialisée à l'aide de l'argument rSize.Cette initialisation inclut le nom de la classe de base pour initialiser, suivi d'une liste entre parenthèses d'arguments au constructeur de la classe.
Dans l'initialisation des classes de base, l'objet qui n'est pas le sous-objet représentant un composant de classe de base est considéré comme « un objet complet. » La classe d'objets complète est considérée comme « la plupart » de la classe dérivée pour l'objet.
Les sous-objets représentant les classes de base virtuelle sont initialisés par le constructeur pour la classe la plus dérivée.Cela signifie que lorsque la dérivation virtuelle est spécifiée, la classe la plus dérivée doit explicitement initialiser la classe de base virtuelle, ou la classe de base virtuelle doit avoir un constructeur par défaut.Les initialisations des classes de base virtuelle qui apparaissent dans les constructeurs pour les classes autres que la classe la plus dérivée sont ignorées.
Bien que l'initialisation des classes de base soit généralement limitée aux classes de base directes, un constructeur de classe peut initialiser une classe de base virtuelle indirecte.