找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 1463|回复: 7

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

[复制链接]
发表于 2009-11-3 03:56:46 | 显示全部楼层 |阅读模式 IP:江苏扬州
#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();
发表于 2009-11-3 03:56:47 | 显示全部楼层 IP:江苏扬州
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指针
回复

使用道具 举报

发表于 2009-11-3 03:56:48 | 显示全部楼层 IP:江苏扬州
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,因为你可以+左右都可以是常数
回复

使用道具 举报

发表于 2009-11-3 03:56:49 | 显示全部楼层 IP:江苏扬州
谢谢两位,不过小弟想问一下,函数返回值是一个对象嘛,不是要有一个对象去接受吗,请问此例中,语句a1+a2后的
接受者是谁呀,语句a3=a1+a2后的又是那个呀,为什么语句a1+a2的前面不用一个接受的对象呢,像a3=a1+a2,但是也行
的通啊,谢谢啦!!!!
回复

使用道具 举报

发表于 2009-11-3 03:56:50 | 显示全部楼层 IP:江苏扬州
你重载之后这个表达式得一个值(a1+a2)
然后有一个临时变量接受
然后给a3
你可以看成直接给a3了
a1+a2这里返回的值你谁也没给
回复

使用道具 举报

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

使用道具 举报

发表于 2009-11-3 03:56:52 | 显示全部楼层 IP:江苏扬州
因为你执行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;
回复

使用道具 举报

发表于 2009-11-3 03:56:53 | 显示全部楼层 IP:江苏扬州
谢谢啦
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 15:24 , Processed in 0.202486 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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