クラス オブジェクトをコピーします
代入演算および初期化操作もオブジェクトをコピーします。
割り当て: 1種類のオブジェクトの値が他のオブジェクトに代入すると、2番目のオブジェクトへの最初のオブジェクトはコピーされません。次に例を示します。
Point a, b; ... a = b;
b の値が a にコピーされます。
初期化: 初期化は引数が値を関数に渡されるか、または値を値によって関数から戻るときに、新しいオブジェクトが宣言された実行されます。
クラス型のオブジェクトの「Copy」の意味を定義できます。たとえば、次のコードを考えてみます。:
TextFile a, b;
a.Open( "FILE1.DAT" );
b.Open( "FILE2.DAT" );
b = a;
前のコードは、「FILE2.DAT から FILE2.DAT への内容をコピーする」を意味する場合もありますが、「FILE2.DAT を無視して b を FILE1.DAT への 2 番目のハンドルにする」という意味もあります。各クラスに次のように適切なコピー セマンティクスをアタッチする必要があります。
戻り値の型と例 ClassName& operator=(const ClassName& x);参照の const によって渡されたパラメーターとしてクラス型への参照とともに代入演算子を使用 operator= によって。
コピー コンストラクターを使用します。コピー コンストラクターに関する詳細については、コンストラクターを宣言するための規則を参照してください。
コピー コンストラクターを宣言すると、コンパイラによってメンバー的にコピー コンストラクターを生成します。コピー代入演算子を宣言すると、コンパイラによってメンバー的にコピー代入演算子を生成します。コピー コンストラクターを宣言すると、コンパイラが生成したコピー代入演算子を、逆に表示されなくなります。またはを1回実行する場合は、コードの意味を明確にするために、他の1を実行することをお勧めします。
メンバーには Memberwise の代入と初期化的割り当てで詳しく説明します。
コピー コンストラクターは [class-name] がコンストラクターが定義されているクラスの名前です。[class-name]**&**で、型の引数を受け取ります。次に例を示します。
// spec1_copying_class_objects.cpp
class Window
{
public:
Window( const Window& ); // Declare copy constructor.
// ...
};
int main()
{
}
[!メモ]
コピー コンストラクターの引数 定数のクラス名& の型をできるだけにします。これによって、コピー コンストラクターが誤ってコピー元のオブジェクトを変更しないようにすることができます。また、[const] のオブジェクトからコピー有効にします。