C++/馬石安/過載賦值運算子(=)函式的返回值
阿新 • • 發佈:2021-01-07
過載賦值運算子(=)函式的返回值
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:輸入輸出運算子(>> <<)的過載也可以進行連續操作,但輸入輸出運算子只能過載為友元函式