正在初始化成員物件
類別可以包含成員物件的類別型別,但若要確保符合成員物件的初始化需求時,發生下列情況之一必須符合:
被收納的物件的類別會要求沒有建構函式。
所包含的物件類別有一個可存取的預設建構函式。
包含類別的建構函式所有明確初始化所包含的物件。
下列範例顯示如何執行這類的初始化:
// spec1_initializing_member_objects.cpp
// Declare a class Point.
class Point
{
public:
Point( int x, int y ) { _x = x; _y = y; }
private:
int _x, _y;
};
// Declare a rectangle class that contains objects of type Point.
class Rect
{
public:
Rect( int x1, int y1, int x2, int y2 );
private:
Point _topleft, _bottomright;
};
// Define the constructor for class Rect. This constructor
// explicitly initializes the objects of type Point.
Rect::Rect( int x1, int y1, int x2, int y2 ) :
_topleft( x1, y1 ), _bottomright( x2, y2 )
{
}
int main()
{
}
Rect類別,在上述範例中,顯示包含兩個成員物件類別的Point。其建構函式明確地初始化物件_topleft和_bottomright。請注意冒號後面 (在定義) 的建構函式的右括號。冒號後的成員名稱和引數,用來初始化型別的物件都有Point。
注意事項 |
---|
指定的建構函式中的成員初始設定式的順序不會影響的順序在其中建構成員 ; 成員被建構的類別中宣告的順序。 |
參考和 const 成員的物件必須使用顯示在 [文法] 區段中的成員初始設定語法初始化初始化基底] 和 [成員。沒有其他方法來初始化這些物件。