Initialisation 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 de DialogBox, la classe de base MyClass est initialisée avec l'argument rSize. Cette initialisation comprend le nom de la classe de base à initialiser, suivi d'une liste entre parenthèses d'arguments du 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 de l'objet complet est considérée comme la classe la plus dérivée de l'objet.
Les sous-objets représentant les classes de base virtuelles 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 virtuelles qui apparaissent dans les constructeurs des 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.