三、C++複製構造関数


C++コピーコンストラクタ
一、基本概念
パラメータは1つのみで、同類オブジェクトへの参照です.
フォーマット:X::X(X&)またはX::X(const X&)で、後者は定数オブジェクトをパラメータとすることができます.
レプリケーションコンストラクタが定義されていない場合、コンパイラはデフォルトのレプリケーションコンストラクタを生成します.デフォルトのレプリケーションコンストラクション関数は、レプリケーション機能を完了します.
例:
class Complex {
public :
    Complex(){ }
    Complex( const Complex & c ) {
        cout << “Copy Constructor called”;
    }
};
Complex c1;
Complex c2(c1);//             

しゅつりょく
Copy Constructor called
二、構造関数の3つの使用場面を複製する
2.1あるオブジェクトが同類の別のオブジェクトを初期化する場合
レプリケーションコンストラクション関数は、次の2つの場合に呼び出されます.
Complex c2(c1); 
Complex c2 = c1; //     ,     

2.2関数としてのパラメータ
class A { 
 public:
        A() { }
        A( A & a) {
            cout << "Copy constructor called" <<endl;
        }
};
void Func(A a1){ }
int main(){
    A a2;
    Func(a2);

    return 0;
}

プログラム出力結果は
Copy constructor called
クラスのオブジェクトがメソッドのパラメータとして機能し、このメソッドが呼び出されると、クラスのレプリケーションコンストラクション関数が呼び出され、このメソッドのパラメータを初期化するために使用されます.
この例では、a 1はレプリケーションコンストラクタによって初期化され、初期化時に呼び出されるレプリケーションコンストラクタのパラメータはa 2である.a 1は必ずしもa 2に等しいとは限らない.a 1の値はレプリケーション構造関数によって初期化されるため、このレプリケーション構造関数はレプリケーションの仕事をしていない.
2.3関数としての戻り値
class A
{
    public:
    int v;
    A(int n) { v = n; };
    A( const A & a) {
        v = a.v;
        cout << "Copy constructor called" <<endl;
    }
};

A Func() {
    A b(4);
    return b; //                 
}

int main() {
    cout << Func().v << endl;
    return 0;
}

出力結果:
Copy constructor called 4
三、まとめ
コンストラクション関数のコピー:
A( A & a) { }
// :
A(const A & a) { }
  • レプリケーションコンストラクタは戻り値がなく、パラメータが1つしかなく、クラスのオブジェクトをクラスの別のオブジェクトにレプリケーションする役割を果たすクラスの参照である
  • .
  • コピーコンストラクション関数が呼び出される場合は、1つのオブジェクトで別のオブジェクトを初期化するとき、1つのオブジェクトがある関数のパラメータとして、その関数が呼び出されたとき、1つのオブジェクトがある関数の戻り値として、この関数が呼び出されたときの
  • の3種類がある.