1. 程式人生 > 其它 >C++/馬石安/過載賦值運算子(=)函式的返回值

C++/馬石安/過載賦值運算子(=)函式的返回值

技術標籤:c++c++

過載賦值運算子(=)函式的返回值

Q:為什麼返回值要設定為物件的引用?
A:實現物件的連續賦值操作

#include <iostream>
#include <cstring>
using namespace std;
class Namelist
{
    char *name;
public:
    Namelist();
    virtual ~Namelist(){};
    Namelist(char *p)
    {
        name = new char[strlen(p)+1];
        strcpy
(name, p); } Namelist& operator =(Namelist &a) { if(this!= &a) { delete name; name = new char[strlen(a.name)+1]; strcpy(name, a.name); } return *this; } void show() { cout << "名字是:"
<< name << endl; } }; int main() { Namelist n1("first object"), n2("second object"), n3("third object"); n1 = n2 = n3; n1.show(); n2.show(); n3.show(); }

由於賦值運算子是右結合的,首先執行n2 = n3,該操作被編譯器解釋為 n2.operator(n3),返回n2的引用,此時n2的值變為了third object;再執行n1 = n2,以此類推。

程式執行結果:
程式執行結果

ps:輸入輸出運算子(>> <<)的過載也可以進行連續操作,但輸入輸出運算子只能過載為友元函式