C++拷貝構造函數及重寫operator =的區別

先來代碼:

 

#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;     這個纔是在做等號運算。

發佈了61 篇原創文章 · 獲贊 60 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章