设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 1463|回复: 7
打印 上一主题 下一主题

[求助](重载时的返回值s返回给了谁)

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-3 03:56:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<iostream.h>
class a
{
int x,y;
public:
a(int i,int j)
{
x=i;y=j;
}
a(){}
void disp()
{
cout<<x<<','<<y<<endl;
}
a operator +(a m)
{
a s;
s.x=x+m.x;
s.y=y+m.y;
return s;
}
};
void main()
{
a a1(3,4),a2(5,6),a3;
a1.disp();
a3=a1+a2;
a3.disp();
小弟想问一下上面的成员函数中返回值给了a1还是a3呀,另外为什么写成这样不行呀,达不到加的效果(主函数)
void main()
{
a a1(3,4),a2(5,6),a3;
a1.disp();
a1+a2;
a1.disp();
2#
发表于 2009-11-3 03:56:47 | 只看该作者
a operator +(a m)
      {
          a s;
          s.x=x+m.x;
          s.y=y+m.y;
          return s;
      }

请仔细看自己的代码

你执行加运算的时候,是定义了一个局部的对象,进行+操作之后,是返回给 局部对象s,然后再return,这个期间, a1 并没有发生改变
想 a1发生改变
必须
x += x+ m.x;
y += y + m.y;
return *this;

因为 a1 + a2 在编译器来看,是 a1.operator +(a2, &amp;a1) //注意 &amp;a1相当于this指针
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-3 03:56:48 | 只看该作者
a operator +(a m)
{
a s;
s.x=x+m.x;
s.y=y+m.y;
return s;
}
先给了临时,然后a3=s
不用friend不如利用this
a operator +(a m)
{
x=x+m.x;
y=y+m.y;
return *this;
}
不过最好用friend,因为你可以+左右都可以是常数
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-3 03:56:49 | 只看该作者
谢谢两位,不过小弟想问一下,函数返回值是一个对象嘛,不是要有一个对象去接受吗,请问此例中,语句a1+a2后的
接受者是谁呀,语句a3=a1+a2后的又是那个呀,为什么语句a1+a2的前面不用一个接受的对象呢,像a3=a1+a2,但是也行
的通啊,谢谢啦!!!!
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-3 03:56:50 | 只看该作者
你重载之后这个表达式得一个值(a1+a2)
然后有一个临时变量接受
然后给a3
你可以看成直接给a3了
a1+a2这里返回的值你谁也没给
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-3 03:56:51 | 只看该作者
首先谢谢啦,不过呢,如果这样的话,那
a operator +(a m)
{
x=x+m.x;
y=y+m.y;
return *this;
}
在主函数中有这么一个语句a1+a2;
运行是成功的,为什么明明要有一个返回的接受者,而只用a1去调用+,而没有返回值的接受者而不出错呢?
不吝赐教!!!!!vc下运行
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-3 03:56:52 | 只看该作者
因为你执行a operator +(a m)
      {
          x=x+m.x;
          y=y+m.y;
          return *this;
      }
的时候,a1的数值已经改变了,所以就算你不赋值给其他变量都不会出现错误,你要注意  这里的x = x+m.x ; x相当于this-&gt;x;
而this可以看成 this = &amp;a1;
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-3 03:56:53 | 只看该作者
谢谢啦
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 14:26 , Processed in 0.086237 second(s), 10 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表