コンストラクタ
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;
}