デフォルトコンストラクタ
コンストラクタ:インデックス への移動
クラス X のデフォルトコンストラクタは,何も引数をとらないので,通常 X::X() の形式になります。あるクラスにユーザー定義のコンストラクタが存在しない場合,コンパイラはデフォルトのコンストラクタを生成します。X x のような宣言において,デフォルトコンストラクタはオブジェクト x を作成します。
すべての関数と同様に,コンストラクタはデフォルトの引数を持つことができます。たとえば次のコンストラクタは,
X::X(int, int = 0)
1 つあるいは 2 つの引数を持つことができます。1 つの引数が与えられたとき,指定のない 2 番目の引数は int の 0 とみなされます。同様に次のコンストラクタは,
X::X(int = 5, int = 6)
2 つ,1 つ,あるいはゼロ個の引数をとることができ,適切なデフォルトが使われます。しかし,引数をとらないデフォルトコンストラクタ X::X() を X::X(int = 0) などのコンストラクタと混同してはいけません。後者は,デフォルトのコンストラクタとして引数なしで呼び出すこともでき,引数を 1 つ与えて呼び出すこともできます。
コンストラクタを定義する際には,あいまいさを避けるように注意してください。次の例では,2 つのデフォルトのコンストラクタはあいまいさを持つことになります。
class X
{
public:
X();
X(int i = 0);
};
int main()
{
X one(10); // 問題ない。X::X(int) を使う
X two; // エラー. X::X() と X::X(int = 0) の
// どちらの呼び出しかわからない
return 0;
}