Inicializace tříd Base
Přímé základní třídy jsou inicializovány téměř stejným způsobem jako členské objekty.Příklad:
// 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()
{
}
Povšimněte si, že v konstruktoru třídy DialogBox je základní třída MyClass inicializována za použití argumentu rSize.Tato inicializace sestává z názvu inicializované základní třídy následovaného seznamem argumentů konstruktoru třídy v závorkách.
Při inicializacích základních tříd je objekt, který není podobjektem představujícím součást základní třídy, považován za "kompletní objekt." Třída kompletního objektu je považována za "nejvíce odvozenou" třídu daného objektu.
Podobjekty představující virtuální základní třídy jsou inicializovány konstruktorem nejvíce odvozené třídy.To znamená, že na místech, kde je zadáno virtuální odvození, musí nejvíce odvozená třída explicitně inicializovat virtuální základní třídu, nebo virtuální základní třída musí obsahovat výchozí konstruktor.Inicializace virtuálních základních tříd, které jsou uvedeny v konstruktorech tříd jiných než nejvíce odvozených, jsou ignorovány.
Ačkoli inicializace základních tříd je obvykle omezena na přímé základní třídy, konstruktor třídy může inicializovat nepřímou virtuální základní třídu.