三、C++複製構造関数
3406 ワード
C++コピーコンストラクタ
一、基本概念
パラメータは1つのみで、同類オブジェクトへの参照です.
フォーマット:X::X(X&)またはX::X(const X&)で、後者は定数オブジェクトをパラメータとすることができます.
レプリケーションコンストラクタが定義されていない場合、コンパイラはデフォルトのレプリケーションコンストラクタを生成します.デフォルトのレプリケーションコンストラクション関数は、レプリケーション機能を完了します.
例:
しゅつりょく
Copy Constructor called
二、構造関数の3つの使用場面を複製する
2.1あるオブジェクトが同類の別のオブジェクトを初期化する場合
レプリケーションコンストラクション関数は、次の2つの場合に呼び出されます.
2.2関数としてのパラメータ
プログラム出力結果は
Copy constructor called
クラスのオブジェクトがメソッドのパラメータとして機能し、このメソッドが呼び出されると、クラスのレプリケーションコンストラクション関数が呼び出され、このメソッドのパラメータを初期化するために使用されます.
この例では、a 1はレプリケーションコンストラクタによって初期化され、初期化時に呼び出されるレプリケーションコンストラクタのパラメータはa 2である.a 1は必ずしもa 2に等しいとは限らない.a 1の値はレプリケーション構造関数によって初期化されるため、このレプリケーション構造関数はレプリケーションの仕事をしていない.
2.3関数としての戻り値
出力結果:
Copy constructor called 4
三、まとめ
コンストラクション関数のコピー:レプリケーションコンストラクタは戻り値がなく、パラメータが1つしかなく、クラスのオブジェクトをクラスの別のオブジェクトにレプリケーションする役割を果たすクラスの参照である .コピーコンストラクション関数が呼び出される場合は、1つのオブジェクトで別のオブジェクトを初期化するとき、1つのオブジェクトがある関数のパラメータとして、その関数が呼び出されたとき、1つのオブジェクトがある関数の戻り値として、この関数が呼び出されたときの の3種類がある.
一、基本概念
パラメータは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) { }