初始化基类

直接基类的初始化方式与成员对象的初始化方式大致相同。 请看下面的示例:

// 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 进行初始化。 此初始化包括要初始化的基类的名称,后跟一个类的构造函数的参数的带括号列表。

初始化基类时,对象被称为“完整对象”,而不是表示基类组件的子对象。完整对象的类被视为该对象的“派生程度最高的”类。

表示虚拟基类的子对象由派生程度最高的类的构造函数进行初始化。 那意味着在指定虚拟派生的位置,大多数派生类必须显式初始化虚拟基类,或虚拟基类必须具有默认构造函数。 将忽略除了派生程度最高的类之外的出现在类的构造函数中的虚拟基类的初始化。

尽管基类的初始化通常被限制在直接基类内,但是类构造函数可以初始化间接虚拟基类。

请参见

参考

初始化基类和成员