Inicjowanie klas podstawowych
Bezpośrednie klasy podstawowe są inicjowane w podobny sposób co obiekty.Rozważmy następujący przykład:
// 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()
{
}
Należy zauważyć, że w konstruktorze dla DialogBox, klasa bazowa MyClass jest inicjowana za pomocą argumentu rSize.Inicjowanie składa się z nazwy klasy bazowej, którą należy zainicjować, a następnie ujętej w nawiasy listy argumentów do konstruktora klasy.
Podczas inicjowania klasy bazowej, obiekt, który nie jest pod obiektem przedstawiającym składnik klasy podstawowej jest uważany za "kompletny obiekt". Klasa kompletnego obiektu jest uważana za "najbardziej pochodną" klasy obiektu.
Pod obiekty reprezentujące wirtualne klasy bazowe są inicjowane przez konstruktor najbardziej pochodnej klasy.Oznacza to, że jeśli zostało określone wirtualne dziedziczenie, najbardziej pochodne klasy muszą jawnie zainicjować wirtualną klasę bazową, lub wirtualna klasa bazowa musi posiadać konstruktor domyślny.Inicjowanie wirtualnych klas bazowych, które ma miejsce w konstruktorze klas innych niż najbardziej pochodna klasa jest ignorowane.
Pomimo tego, że inicjowanie klasy bazowej jest z reguły ograniczone do bezpośredniej klasy bazowej, konstruktor klasy może zainicjować niebezpośrednią wirtualną klasę bazową.