コンストラクターを宣言するための規則
コンストラクターはクラスと同じ名前になります。コンストラクターの一部がオーバーロードされた関数の規則に従うと宣言できます。(詳細についてはオーバーロード を参照してください)。
class-name ( argument-declaration-list )
解説
argument-declaration-list は空の場合もあります。
C++ では2 種類の特殊なコンストラクター次の表に示す既定のコンストラクターとコピー コンストラクターを定義します。
既定のコンストラクターとコピー コンストラクター
型の構築 |
引数 |
目的 |
---|---|---|
既定のコンストラクターです。 |
引数なしで呼び出すことができます。 |
クラス型の既定のオブジェクトを構築します。 |
コピー コンストラクター |
同じクラス型への参照の一つの引数を受け取ることができます |
クラス型のオブジェクトのコピー |
既定のコンストラクターは引数なしで呼び出すことができます。ただしすべての引数に既定値がある場合は引数リストに対して既定のコンストラクターを宣言できます。同様にコピー コンストラクターが同じクラス型への参照の引数を受け取る必要があります。引数の詳細は後続のすべての引数を指定して既定値を指定できます。
コンストラクターを指定しない場合コンパイラは既定のコンストラクターを生成しようとします。コピー コンストラクターを指定しない場合コンパイラは 1 を生成しようとします。これらのコンパイラにより生成されたコンストラクターはパブリック メンバー関数と見なされます。このエラーはオブジェクトではなく参照である最初の引数を持つコピー コンストラクターを指定した場合に生成されます。
コンパイラが生成した既定のコンストラクターはオブジェクト (前に説明した初期化の vftables と vbtables) 設定し基本クラスの既定のコンストラクターとメンバーを呼び出しますが他のアクションは実行されません。基本クラスとメンバーのコンストラクターは明確でアクセスできるいる場合にのみ呼び出されます。
コンパイラが生成したコピー コンストラクターは新しいオブジェクトを作成しコピーするオブジェクトのコンテンツのメンバーごとのコピーを実行します。基本クラスまたはメンバーのコンストラクターがある場合はが呼び出されます。; はビットごとにコピーされます。
クラス type のすべての基本型およびメンバーのクラスに 定数 の引数を受け取るコピー コンストラクターがある場合はコンパイラが生成した 定数 type コピー コンストラクターは型の引数を受け取ります。はコンパイラが生成した type コピー コンストラクターは型の引数を受け取ります。
定数 または volatile のオブジェクトをコンストラクターを使用するコンストラクター自体は 定数 または volatile として宣言することはできません。コンストラクターの正しいストレージ クラスはです インライン ; 他のストレージ クラス修飾子を使用するとコンストラクターで __declspec のキーワードがコンパイラ エラーが発生します。
stdcall の呼び出し規約は __stdcall のキーワードで宣言した静的メンバー関数とグローバル関数で使用され可変個引数リストを使用しません。使用するときに非静的メンバー関数の __stdcall のキーワードはコンストラクターなどコンパイラ使用します thiscall の呼び出し規約」を付けます。
基本クラスのコンストラクターは派生クラスに継承されません。派生クラス型のオブジェクトは基本クラスのコンポーネントによって開始された ;。その後派生クラスのコンポーネントに移動します。コンパイラは完全なオブジェクトのその部分が初期化されるとの基本クラスのコンストラクターを使用します。基本クラスを初期化します。 に示すように仮想派生の場合を除く)。