C ++のコンストラクタ
C ++コンストラクタは、コンストラクタに比べて、コンストラクタに分割され、コンストラクタをコピーされ、コピーコンストラクタは、より便利に、より速く使用しています。コンストラクタは複数持つことができ、2つだけは、コピーコンストラクタを持っているので、コンストラクタのパラメータをコピーし
、ユーザは、自身の補助コンストラクタが定義されていない場合、唯一の現在のクラスがオブジェクトである、パラメータテーブルが固定され、過負荷になりませんシステムが自動的にその役割は、現在のオブジェクトパラメータに与えられたコピーコンストラクタを生成します。あなたはコピーコンストラクタを定義することができた場合、システムはデフォルトのコピーコンストラクタを生成しません。あなた自身を構築することができ、ユーザによって定義されたコピーコンストラクタ関数は、必ずしもコピー機能を実行しません。
コピーコンストラクタ関数を持つコンストラクタ・ずっと同じですが、違いがあり、ここではコピーコンストラクタ呼び出しは3の場合だ
オブジェクトは同じ種類の別のオブジェクトを初期化するために使用される場合、1コピーコンストラクタにつながります機能の呼び出し
、次の二つの文の、コール、コピーコンストラクタになります
Complex c1(c2);
Complex c1=c2;
これら二つの文の等価性は、第二の文が初期化ステートメントではなく、代入文である場合は
、この文は、次のあなたはコピーコンストラクタを呼び出すことはありません
Complex c1,c2;
c1=c2;
コピーコンストラクタを使用して初期化する対象のパラメータとして2.
以下のステートメントを証明することができます
#include<iostream>
using namespace std;
class A{
public:
A(){};//构造函数
A(A&a)//复制构造函数
{
cout<<"Copy constructer called"<<endl;
}
};
void Func(A a)//普通函数
{
}
int main()
{
A b;
Func(b);//此语句相当于是将b复制给Func(a)中的a,导致调用复制构造函数
retur 0;
}
プログラムの実行ショット
3.関数は、関数が返す、クラスAのオブジェクトを返した場合、コピーコンストラクタクラスAが呼び出されます
、次の手順
#include<iostream>
using namespace std;
class A{
public:
int v;
A(int i){
v=i;
};//构造函数
A(A&a)//复制构造函数
{
cout<<"Copy constructer called"<<endl;
}
};
A a(4);
A Func()//普通函数
{
return a;
}
int main()
{
cout<<Func().v<<endl;//此语句中的Func()是一个类A的对象,但是不是a,只是用a初始化。
return 0;
}
これらの3例は、より一般的なコピーコンストラクタの例と呼ばれています
討論、論文へようこそ