Инициализация базовые классы
Инициализируются непосредственно базовые классы тем же способом, что и объекты участника.Рассмотрим следующий пример:
// 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()
{
}
Обратите внимание, что в конструкторе, DialogBox" MyClass базовый класс инициализируется с помощью аргумента rSize.Такая инициализация состоит из имени базового класса для инициализации, заключенное в скобки списком аргументов конструктора типа.
В инициализации базовых классов, объект, который не является subobject, представляющий компонент базового типа считается «полным объектом». Полный класс объекта считается «производный» классом для большинства объектов.
Subobjects, представляющий виртуальных базовых классов инициализированы конструктором для большинства производного класса.Это значит, что, когда фактически вывод указан, большинство производный класс должен явно инициализации виртуального базового класса, или виртуального базового класса, должен иметь конструктор по умолчанию.Инициализацию виртуальных базовых классов, которые появляются в конструкторы для классов, отличных от наиболее производного класса не учитываются.
Хотя инициализация базовых классов обычно ограничена непосредственно базовым классам, конструктор класса может инициализировать косвенный виртуального базового класса.