Clases base que se inicializan
Las clases base directas se inicializan de la misma manera que objetos miembro.Considere el ejemplo siguiente:
// 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()
{
}
Observe que en el constructor para DialogBox, la clase base de MyClass inicializa utilizando el argumento rSize.Esta inicialización consta del nombre de la clase base para inicializar, seguido por una lista entre paréntesis de argumentos del constructor de la clase.
En la inicialización de clases base, el objeto que no es el subobjeto que representa un componente de la clase base se considera un “objeto completo”. La clase de objeto completo se considera “la mayoría” de la clase derivada para el objeto.
Los objetos secundarios que representan clases base virtuales se inicializan por el constructor para la clase derivada.Eso significa que donde se especifica la derivación virtual, la clase derivada debe explícitamente inicializar la clase base virtual, o la clase base virtual debe tener un constructor predeterminado.Las inicializaciones de las clases base virtuales que aparecen en los constructores de clases distintas de la clase derivada se omiten.
Aunque la inicialización de clases base se limita normalmente a las clases base directas, un constructor de clase puede inicializar una clase base virtual indirecta.