Initialisieren von Basisklassen
Direkte Basisklassen werden nahezu auf die gleiche Weise wie Memberobjekte initialisiert. Betrachten Sie das folgende Beispiel:
// 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()
{
}
Beachten Sie, dass im Konstruktor für DialogBox die MyClass-Basisklasse mithilfe des rSize-Arguments initialisiert wird. Diese Initialisierung besteht aus dem Namen der zu initialisierenden Basisklasse, gefolgt von einer in Klammern gesetzten Liste mit Argumenten für den Konstruktor der Klasse.
Bei der Initialisierung von Basisklassen gilt das Objekt, das nicht das darstellende Unterobjekt einer Komponente der Basisklasse ist, als "vollständiges Objekt". Die Klasse des vollständigen Objekts gilt als "am stärksten abgeleitete" Klasse für das Objekt.
Die Unterobjekte, die virtuelle Basisklassen darstellen, werden vom Konstruktor für die am stärksten abgeleitete Klasse initialisiert. Dies bedeutet, dass bei Angabe einer virtuellen Ableitung die am meisten abgeleitete Klasse die virtuelle Basisklasse explizit initialisieren oder die virtuelle Basisklasse über einen Standardkonstruktor verfügen muss. Initialisierungen für virtuelle Basisklassen, die in den Konstruktoren für Klassen angezeigt werden, die nicht zur am stärksten abgeleiteten Klasse gehören, werden ignoriert.
Obwohl die Initialisierung von Basisklassen normalerweise auf direkte Basisklassen beschränkt ist, kann ein Klassenkonstruktor eine indirekte virtuelle Basisklasse initialisieren.