デフォルト・コンストラクター とは、パラメーターがないか、
ある場合でも、すべての パラメーターにデフォルト値があるコンストラクターです。
クラス A にユーザー定義のコンストラクターが必要であるが、 それが存在しない場合、コンパイラーは、コンストラクター A::A() を暗黙的に宣言します。 このコンストラクターは、そのクラスのインライン・パブリック・メンバーです。 コンパイラーが、コンストラクターを使用して、型 A のオブジェクトを作成する時に、 コンパイラーは、A::A() を暗黙的に定義 します。 コンストラクターは、コンストラクター初期化指定子もヌル・ボディも持つようにはなりません。
コンパイラーは、まず最初に暗黙的に宣言された基底クラスのコンストラクターと、 クラス A の非静的データ・メンバーを暗黙的に定義してから、 暗黙的に宣言された A のコンストラクターを定義します。 定数や参照型メンバーを持つクラスに対して、デフォルトのコンストラクターは作成されません。
クラス A のコンストラクターは、次のことがすべて true であれば、単純 です。
上記のいずれかが false であれば、コンストラクターは、非単純 です。
共用体メンバーは、非単純コンストラクターを持つクラス型にはできません。
すべての関数と同様、コンストラクターは、デフォルト引き数を持つことができます。 これらは、メンバー・オブジェクトの初期化に使用されます。 デフォルト値が提供される場合、末尾引き数は、コンストラクターの式リストで省略できます。 コンストラクターにデフォルト値を持たない引き数がある場合、 それはデフォルト・コンストラクターではないことに注意してください。
クラス A のコピー・コンストラクター とは、 その第 1 パラメーターが、型 A&、const A&、volatile A&、 または const volatile A& のいずれかであるコンストラクターです。 コピー・コンストラクターは、あるクラス・オブジェクトを、 同じクラス型の別のクラス・オブジェクトからコピーするために使用されます。 そのクラスと同じタイプの引き数でコピー・コンストラクターを使用することはできません。 参照を使用する必要があります。 すべてがデフォルト引き数である限り、追加パラメーターを持つコピー・コンストラクターを提供することはできます。 あるクラスにユーザー定義のコンストラクターが必要であるにもかかわらず、 それが存在しない場合、コンパイラーは、そのクラス用に、 パブリック・アクセスを持つコピー・コンストラクターを作成します。 コンパイラーは、メンバーまたは基底クラスにアクセス不能な コピー・コンストラクターがあるクラスに対しては、コピー・コンストラクターを作成しません。
次のコードは、デフォルト・コンストラクターとコピー・コンストラクターがある 2 つの クラスを示しています。
class X { public: // default constructor, no arguments X(); // constructor X(int, int , int = 0); // copy constructor X(const X&); // error, incorrect argument type X(X); }; class Y { public: // default constructor with one // default argument Y( int = 0); // default argument // copy constructor Y(const Y&, int = 0); };
関連参照