初始化基底類別
直接基底類別與成員物件初始化的方式幾乎相同。 參考下列範例:
// 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 引數初始化。 這個初始化包含要初始化的基底類別名稱,後面接著類別建構函式之括號括住的引數清單。
在基底類別的初始化中,不是代表基底類別元件之子物件的物件會視為「完整物件」。完整物件的類別會視為物件的「最具衍生性」類別。
代表虛擬基底類別的子物件是由最具衍生性之類別的建構函式進行初始化。 這表示,只要是指定虛擬衍生的位置,最具衍生性類別就必須明確初始化虛擬基底類別,否則虛擬基底類別必須具有預設建構函式。 若虛擬基底類別的初始化不是在最具衍生性類別的類別建構函式中出現,則會被忽略。
雖然基底類別的初始化通常限於直接基底類別,但是類別建構函式仍可以初始化間接虛擬基底類別。