c++ 赋值运算符重载返回的this有什么作用?

来源:百度知道 编辑:UC知道 时间:2024/05/31 16:33:52
class A
{
...
A & operator=(const A &);
private:
int *p;
};

A & A::operator=(const A &rhs)
{
...
*p=rhs.getData();
return *this; //既然上面那一行*p已经被赋值了。那么为什么还要
返回this呢?比如a=b;把this返回给了a有什么用?
a中的值已经改变了啊

}

首先这里返回是指(a=b)这个整体返回*this,也就是返回a的引用,这样做是为了支持c=a=b这样的连续赴值,等于c=(a=b),以和int,float这种内部类型的使用方法一致。

重载运算符时,首先要考虑使重载后的运算符符合C++默认语法的语义。
就赋值号而言,C++中允许这样的用法:
int a, b;
b = (a = 1);
注意其中的赋值表达式(a = 1)是返回变量a(此时其值为1)的。这个返回值就是赋值运算符的返回值。这样一来变量b也可以被赋值为a。
因此,我们自己重载赋值运算符以后,也要返回被赋值的对象,即this。

//如果不是引用,就要用this,试试看
class A
{
...
operator=(const A );
private:
int *p;
};

A::operator=(const A rhs)
{
...
*p=rhs.getData();
return *this;