C ++プログラマ定義のコピーコンストラクタ

動的にメモリを割り当てるコンストラクタ、プログラマはデフォルトコンストラクタが問題になる場合は、あなた自身のコピーコンストラクタを記述する必要があります。

プログラマは、クラスのコピーコンストラクタを定義することができます。プログラマ定義のコピーコンストラクタは、持っている必要がありますパラメータ同じクラスへの参照を例プロトタイプ:

  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)関数は、オブジェクトの値はクラスである返します。

注:プレス状の参照やポインタクラス参照を渡すために、コピーコンストラクタが呼び出されることはありません。関数は、オブジェクトへの参照またはポインタを返す場合、さらに、それがコピーコンストラクタを呼び出すことはありません。

 

おすすめ

転載: www.cnblogs.com/ruigelwang/p/12626880.html