重载赋值运算符(=)函数的返回值
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:输入输出运算符(>> <<)的重载也可以进行连续操作,但输入输出运算符只能重载为友元函数