先來代碼:
#include <iostream>
using namespace std;
class CA
{
public:
CA(int b)
{
cout << "constructure" << endl;
a=b;
}
CA(const CA& C) // 拷貝構造函數
//必須傳引用 ,如果傳值,就會要求構造臨時對象,需要調用拷貝構造,又傳值,又調用拷貝構造。。。
{
cout << "copy constructure" << endl;
a=C.a;
}
CA& operator=(const CA& C)//重寫operator=
{
cout << "operator =" << endl;
a = C.a;
return *this;
}
void Show()
{
cout<<a<<endl;
}
private:
int a;
};
//下面這個函數是調用拷貝構造函數的一種情況
void pass_value(CA c)
{
cout << "in pass_value" << endl;
return;
}
int main()
{
CA A(100);
CA B(A); //拷貝構造
CA C = B;//拷貝構造
B = A;// operator=
pass_value(A); // 這個時候 因爲是傳值的,所以也會調用到拷貝構造函數
return 0;
}
1.拷貝構造函數,就是構造函數的一種特殊形式。其傳入的參數是同類型的一個引用。
2.operator=重寫=運算。其形式也有一定的特殊性。
3. 再來看,使用的情況。
CA B(A); 這是一個顯示的構造函數的情況。
CA C=B; 這個看上去像是一個等號運算,但是實際上因爲此時是要新建一個對象。所以仍然調用的是拷貝構造。
B =A; 這個纔是在做等號運算。