| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 623 人关注过本帖
标题:[求助](重载时的返回值s返回给了谁)
只看楼主 加入收藏
梦里蓝天
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-7-27
收藏
 问题点数:0 回复次数:7 
[求助](重载时的返回值s返回给了谁)
#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();
搜索更多相关主题的帖子: 返回值 重载 
2006-07-27 12:47
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
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指针

c++/C + 汇编 = 天下无敌
2006-07-27 13:00
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
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,因为你可以+左右都可以是常数

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-07-27 15:21
梦里蓝天
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-7-27
收藏
得分:0 
谢谢两位,不过小弟想问一下,函数返回值是一个对象嘛,不是要有一个对象去接受吗,请问此例中,语句a1+a2后的
接受者是谁呀,语句a3=a1+a2后的又是那个呀,为什么语句a1+a2的前面不用一个接受的对象呢,像a3=a1+a2,但是也行
的通啊,谢谢啦!!!!

2006-07-27 16:47
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
你重载之后这个表达式得一个值(a1+a2)
然后有一个临时变量接受
然后给a3
你可以看成直接给a3了
a1+a2这里返回的值你谁也没给

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-07-27 17:11
梦里蓝天
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-7-27
收藏
得分:0 
首先谢谢啦,不过呢,如果这样的话,那
a operator +(a m)
{
x=x+m.x;
y=y+m.y;
return *this;
}
在主函数中有这么一个语句a1+a2;
运行是成功的,为什么明明要有一个返回的接受者,而只用a1去调用+,而没有返回值的接受者而不出错呢?
不吝赐教!!!!!vc下运行

2006-07-27 17:20
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
因为你执行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;

c++/C + 汇编 = 天下无敌
2006-07-27 18:55
梦里蓝天
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-7-27
收藏
得分:0 
谢谢啦

2006-07-27 19:46
快速回复:[求助](重载时的返回值s返回给了谁)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024761 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved