operator= 的思考

class A

{

public:

    A();

    ~A();

    A& operator= (const A& other)

    {

        if(this == &other)

            return *this;

        b = other.b;

        strcpy(c, other.c);

        return *this;

    }

int b;

char *c;

};

 

下面一步步解釋:

爲什麼other是引用傳值不是複製傳值,而且要加上const?因爲other是一個類,所以就有可能有指針成員

如c,那麼,如果是複製傳遞,other中c只是實際的地址的複製,而當前是在另一個棧中,所以c中記錄的地址並不是

真正的地址!

爲什麼返回值是引用呢?可以這樣理解,我們通過默認構造函數定義了一個A的成員a,這個成員沒有值,這個時候,

我想把其它的成員b給a,這個時候如何做?其實這個時候是把b成員的值給a,

        b = other.b;

        strcpy(c, other.c);

        return *this;

這幾句中,在return *this;之前a什麼都沒有得到,因爲這時候的this和a沒有關係,這時候的this更像一個臨時的

A的對象,直到return *this;才把this給a,這也是爲什麼用引用,因爲引用才能保證,this和a是一個事物

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章