重载+=的一个小题目

dthgmf 2015-06-14 03:48:12

#include <iostream>
using namespace std;
class Amount
{ int amount;
public:
Amount(int n=0):amount(n){}
int getAmount()const{return amount;}
Amount & operator += (Amount &a)
{ amount+=a.amount;
return a;

}
};
int main()
{ Amount x(3),y(7);
x+=y;
cout<<x.getAmount()<<endl;
return 0;
}

第10行 为什么return a和return *this的结果都是一样?
...全文
670 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
水落 2015-06-15
  • 打赏
  • 举报
回复
*this 对应x , a对应y!重载函数是x.Amount增加了,y没增加。 返回值是表达式x+=y的值,不影响x和y。如果你把表达式写成 z= x+=y , return a和return *this所对应的z的值就是不一样的。
WangPengJu__ 2015-06-15
  • 打赏
  • 举报
回复
像楼上说的, 没用到x+=y的返回值,你只是让x.a做了一个加法而已.无论你返回值是什么都不影响,比如void
fly_dragon_fly 2015-06-15
  • 打赏
  • 举报
回复
没有用到+=的返回值, 改成 cout<<(x+=y).getAmount()试试
kuankuan_qiao 2015-06-15
  • 打赏
  • 举报
回复
狂奔的蜗牛 2015-06-15
  • 打赏
  • 举报
回复
引用 11 楼 zhoutongsjtu 的回复:
重载+=不需要返回值。
#include <iostream>

using namespace std;

class Amount
{      int amount;
public:
    Amount(int n=0):amount(n){}
    int getAmount() const {return amount;}
    void  operator += (Amount &a)
    {   
		amount+=a.amount;
    }
};
int main()
{   Amount x(3),y(7);
    x+=y;
    cout<<x.getAmount()<<endl;
    return 0;
}
x+=x+=y;这样还能运行不?
  • 打赏
  • 举报
回复
有个问题要问一下子啊 ?
co脚大汉 2015-06-15
  • 打赏
  • 举报
回复
重载+=不需要返回值。
#include <iostream>

using namespace std;

class Amount
{      int amount;
public:
    Amount(int n=0):amount(n){}
    int getAmount() const {return amount;}
    void  operator += (Amount &a)
    {   
		amount+=a.amount;
    }
};
int main()
{   Amount x(3),y(7);
    x+=y;
    cout<<x.getAmount()<<endl;
    return 0;
}
wq327 2015-06-15
  • 打赏
  • 举报
回复
引用 9 楼 u013790834 的回复:
你的返回值并没有用来接收懂吗?你所重载的+=只是将你的左操作符改变了值,相当于你调用了函数,函数有返回值但是没有将它保存下来而已。如果你要验证一下,可以这样:

Amount x(3),y(7);
Amount tem = ( x+=y);
cout<<tem .getAmount()<<endl;
这时候修改了返回值,那么就会存在差别了,明白了吗
考虑到优先级的问题,需要加上括号进行
wq327 2015-06-15
  • 打赏
  • 举报
回复
你的返回值并没有用来接收懂吗?你所重载的+=只是将你的左操作符改变了值,相当于你调用了函数,函数有返回值但是没有将它保存下来而已。如果你要验证一下,可以这样:

Amount x(3),y(7);
Amount tem =  x+=y;
cout<<tem .getAmount()<<endl;
这时候修改了返回值,那么就会存在差别了,明白了吗
ggsjj 2015-06-14
  • 打赏
  • 举报
回复
刚才卡了,以为没发出去,就又发了一个
ggsjj 2015-06-14
  • 打赏
  • 举报
回复
我感觉应该是对象x调用自己的成员函数“+=”,无论return a还是this *,其结果都是已经把x的私有数据成员amount改变了,如果你用Amount c=x+=b;那么这个时候就会有差别了,感觉这个+=有点相当于我们平时运算的+,不过这个时候它可以改变加数的数据成员罢了,这样类比的话,就可以看作是x+y并没有把这个和赋给某个变量,所以无论返回谁都没影响,这是我的想法
ggsjj 2015-06-14
  • 打赏
  • 举报
回复
我感觉应该是对象x调用自己的成员函数“+=”,无论return a还是this *,其结果都是已经把x的私有数据成员amount改变了,如果你用Amount c=x+=b;那么这个时候就会有差别了,感觉这个+=有点相当于我们平时运算的+,不过这个时候它可以改变加数的数据成员罢了,这样类比的话,就可以看作是x+y并没有把这个和赋给某个变量,所以无论返回谁都没影响,这是我的想法
_jeevan 2015-06-14
  • 打赏
  • 举报
回复
我是新手,回答不好勿喷。首先楼主的重载函数为类成员,由自加重载符,可以看出其实类成员重载函数的参数列表隐藏了一个排在第一的*this指针指向自己。 由此,楼主的返回a和this不同也可以理解了吧。返回this,是返回对自己的引用,可以做左值。 返回a是返回的接受的参数的引用。具体差别请详见图片。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧