次の方法で共有


クラス オブジェクトをコピーします

代入演算および初期化操作もオブジェクトをコピーします。

  • 割り当て: 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] のオブジェクトからコピー有効にします。

参照

関連項目

特殊なメンバー関数 (C++)