C ++コピー関数コピーコンストラクタデストラクタ代入演算子

コンストラクタ

1.定義:

各クラスは、オブジェクトの初期化方法を定義します。クラスは、1つまたは複数の特別なメンバー関数を介してオブジェクトの初期化プロセスを制御します。
これらの関数はコンストラクターと呼ばれます。

2.機能:

2.1

コンストラクターの名前はクラス名と同じであり、戻り値の型はありません。それ以外の場合、コンストラクターのパラメーターリストは空になる可能性があり、関数本体も空になる可能性があります

2.2

コンストラクターをconstとして宣言することはできません。

3.デフォルトのコンストラクター

#include<iostream>
using namespace std;
class Test
{
    
    
public:

private:
	int m_data;
};
void  main()
{
    
    
	Test t;//调用构造函数

ここに画像の説明を挿入します

オブジェクトtの初期値を指定しなかったため、デフォルトのコンストラクターはt.m_dataをランダムな値に初期化します


  • デフォルトコンストラクターは、コンパイラーによって作成されたコンストラクターであり、合成デフォルトコンストラクターとも呼ばれます。
  • デフォルトのコンストラクターには引数がありません

コピーコンストラクタ

1.定義:

コンストラクターの最初のパラメーターがそれ自体のクラスタイプへの参照であり、追加のパラメーターにデフォルト値がある場合、このコンストラクターを次のように呼び出します。コピーコンストラクター

class Test
{
    
    
public:
	Test(int a =0)
	{
    
    
		m_data = a;
	}
	Test(const Test &t)
	{
    
    
		m_data = t.m_data;
	}
private:
	int m_data;
};
void  main()
{
    
    
	Test t;//调用构造函数
	Test t1 = t;//调用拷贝构造函数
}
  • コピーコンストラクター の最初のパラメーターは参照型である必要があります。最初のパラメーターが参照型でない場合、仮パラメーターのコンストラクターを呼び出す必要があるため、コピーコンストラクターの呼び出しは成功しません。これにより、無限ループが発生します。現象。

デストラクタ

1.定義

デストラクタは、コンストラクタによって作成されたリソースを解放し、オブジェクトの非静的データメンバーを破棄します。

2.機能

1.デストラクタはクラスのメンバー関数です
2.名前はチルダとそれに続くクラス名で構成され
ます3.戻り値はあり
ません4.パラメータを受け入れません

#include<iostream>
using namespace std;
class Test
{
    
    
public:

	~Test()//析构函数
	{
    
    

	}
private:
	int m_data;
};
void  main()
{
    
    
	Test t;//调用构造函数
}

-デストラクタはパラメータを受け入れないため、オーバーロードできません。特定のクラスに対して、デストラクタは1つだけになります

オーバーロードされた代入演算子

1.定義

オーバーロードされた演算子は本質的に関数であり、その名前は演算子キーワードとそれに続く定義される演算子の記号で構成されます。代入演算子はoperator =という名前の関数です。

2.機能

代入演算子は通常、左側のオペランドへの参照を返す必要があります

#include<iostream>
using namespace std;
class Test
{
    
    
public:

	Test& operator=(const Test &t)//传引用效率更高,不用调用构造函数为形参开辟空间
	{
    
    
		if (this != &t)//判断调用的形参是否为自己
		{
    
    
			m_data = t.m_data;
		}
		return *this;// 如果if里面条件成立直接返回,否则赋值之后返回
	}
private:
	int m_data;
};
void  main()
{
    
    
	Test t;//调用构造函数
	Test t1 = t;
}

4つの関数を呼び出すための完全なコード:

#include<iostream>
using namespace std;
class Test
{
    
    
public:
	Test(int a = 10)
	{
    
    
		m_data = a;
		cout << "Create Test Obj and the Address is: "<< this<<endl;
	}
	Test(const Test &t)
	{
    
    
		m_data = t.m_data;
		cout << "Create Test Obj and the Address is: " << this << endl;
	}
	Test& operator=(const Test &t)
	{
    
    
		if (this != &t)
		{
    
    
			m.data = t.m_data;
		}
		return *this;
	}
	~Test()
	{
    
    
		cout << "Free Test Obj and the Address is:" << this<<endl;
	}
private:
	int m_data;
};
void  main()
{
    
    
	Test t;//调用构造函数
	Test t1 = t;
}

おすすめ

転載: blog.csdn.net/ahuyccc/article/details/115034119