動的にメモリを割り当てるコンストラクタ、プログラマはデフォルトコンストラクタが問題になる場合は、あなた自身のコピーコンストラクタを記述する必要があります。
プログラマは、クラスのコピーコンストラクタを定義することができます。プログラマ定義のコピーコンストラクタは、持っている必要がありますパラメータで同じクラスへの参照を。例プロトタイプ:
NumberArray :: NumberArray(NumberArray&OBJ)
{
ARRAYSIZE = obj.arraySize。
APTR =新しいダブル[ARRAYSIZE]。
用(INTインデックス= 0、インデックス<ARRAYSIZE;インデックス++)
{
APTR [インデックス] = obj.aPtr [インデックス]。
}
}
注:コピーコンストラクタのパラメータが存在する必要があり、パラメータが同じクラスへの参照です。あなたは、識別子&参照パラメータを忘れてしまった場合は、コンパイラエラーが発生します。コピーコンストラクタは、コピーされたオブジェクトを変更してはならないので、さらに、パラメータは、const参照であるべきです。
関数呼び出しで値によってオブジェクトを渡すたびに、コンパイラが自動的にオブジェクトのコピーを作成するために、コピーコンストラクタを呼び出します。これは、コンストラクタの形状パラメータが参照によって渡される必要があり、コピーはこのためです。コンストラクタが呼び出されたときに値によって渡された場合、コンストラクタは値渡しのコピーを作成するために、再びすぐに呼び出されるため、につながりますコンストラクタは、エンドレスチェーンを呼び出します。
1.コンストラクタ呼び出しをコピーします
オブジェクトが作成され、それを初期化するために、同じクラスの別のオブジェクトを使用しているときはいつでも、システムが自動的にコピーコンストラクタ、例を呼び出します。
矩形ボックス(5、10)。
長方形B =ボックス; //初期化ステートメント
長方形B1(ボックス); //初期化ステートメント
クラス型パラメータの関数への呼び出しを受信すると、自動的にコンストラクタ呼び出しをコピーします。例えば:
空の楽しみ(四角形四角形)
{
}
それを呼び出すために、次の文を仮定:楽しい(キツネ)。
これは、矩形コピーコンストラクタが呼び出される原因となります。最後に、オブジェクトの値は、関数、クラスによって返される限り、自動的にコピーコンストラクタを呼び出します。したがって、次の関数では、return文が実行されたときには、コピーコンストラクタを呼び出します。
長方形makeRectangle()
{
矩形RECT(12,3)。
RECTを返します。
}
return文はとても関数が戻った後、呼び出し側がコピーを使用することができ、そのオブジェクトの一時的な非ローカルコピーを作成する必要があるためです。要約すると、コピーコンストラクタクラスは、次の場合に呼び出されます。
1)変数は、同じクラスのオブジェクトを初期化するために使用されます。
2)基準関数の値は、クラスタイプを呼び出すために使用されます。
3)関数は、オブジェクトの値はクラスである返します。
注:プレス状の参照やポインタクラス参照を渡すために、コピーコンストラクタが呼び出されることはありません。関数は、オブジェクトへの参照またはポインタを返す場合、さらに、それがコピーコンストラクタを呼び出すことはありません。