クラスはクラス型のメンバー オブジェクトを格納できますがメンバー オブジェクトの初期化要件が満たされていることを確認するために次の条件の 1 つが満たされている必要があります :
含まれるオブジェクトのクラスにはコンストラクターを必要としません。
含まれるオブジェクトのクラスにアクセスできる既定のコンストラクターが含まれます。
含むクラスのコンストラクターはすべて明示的に含まれるオブジェクトを初期化します。
次の例ではこのような初期化を実行する方法を示しています :
// 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 の 2 種類のメンバー オブジェクトが含まれます。そのコンストラクターを明示的にオブジェクト _topleft と _bottomright を初期化します。コロンがコンストラクターの右かっこの後に注意してください (定義)。コロンが Point 型のオブジェクトを初期化する引数およびメンバーの名前を指定します。
[!メモ]
メンバーの初期化子がコンストラクターで指定する順序はメンバーが構築される順序に影響を与えません ; メンバーはクラスで宣言されている順序で構成されます。
ベースおよびメンバーの初期化 の参照と 定数 のメンバー オブジェクトをセクションを使用してで示したメンバーの初期化の構文初期化する必要があります。これらのオブジェクトを初期化する方法は他にもあります。