デフォルト・コンストラクター

C++デフォルト・コンストラクター とは、パラメーターがないか、 ある場合でも、すべての パラメーターにデフォルト値があるコンストラクターです。

クラス 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);
};

関連参照

IBM Copyright 2003