| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1357 人关注过本帖
标题:符号重载的问题
只看楼主 加入收藏
xieyuanchang
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-8-5
收藏
 问题点数:0 回复次数:10 
符号重载的问题
A & operate = (const A &other);与
A operate = (const A &other);
有什么区别?
搜索更多相关主题的帖子: 符号 重载 
2007-08-07 21:08
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 
一个返回的是对象引用,一个返回对象的拷贝

天行健,君子以自强不息!!QQ:68660681
2007-08-07 21:42
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
A& 引用返回,返回值本身;
A 返回值副本,有个复制构造函数调用过程;

其次引用返回的是一个左值。

Fight  to win  or  die...
2007-08-07 22:07
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 
以下是引用aipb2007在2007-8-7 22:07:15的发言:
A& 引用返回,返回值本身;
A 返回值副本,有个复制构造函数调用过程;

其次引用返回的是一个左值。

what this sentence mean?
why can't me input chiese word?


天行健,君子以自强不息!!QQ:68660681
2007-08-07 22:10
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
以下是引用maoguoqing在2007-8-7 22:10:57的发言:

what this sentence mean?
why can't me input chiese word?

比如,重载下标操作符
A& operator[](int i);

引用返回的话,可以直接修改A的值,比如B[1] = ..

如果非引用返回的话,就不行了。


Fight  to win  or  die...
2007-08-07 22:23
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 

嗯,这样说我就明白了,不过在重载付值操作的时候这样做只是为了和标准的类型一至,可以用连等号。


天行健,君子以自强不息!!QQ:68660681
2007-08-07 22:39
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
其实赋值操作符,我觉得用引用返回或者非引用返回都差不多。
因为=运算是右结合的,所以用连等号与这个&似乎关系不大。

不知道我理解对不,只是习惯上在=时都用上了&.

Fight  to win  or  die...
2007-08-07 22:42
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 

本来是可以的,但是最好返回引用

1。效率,返回非引用会调用一次构造函数
2。与标准类型一致,如
int i,j=1,k=2;
(i=j)=k;//这样就改变了操作的先后,i=j如果不返回i的引用,那么k的值就无法付给i了



天行健,君子以自强不息!!QQ:68660681
2007-08-07 22:51
xieyuanchang
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-8-5
收藏
得分:0 

谢谢你们的讨论我认真看了下,并对此希望再给上我的理解
与ls说的首先是效率,由于符号重载一般返回的都是对象和对象指针,都不是简单变量.
引用调用可以提高效率,避免调用构造函数.

但是我想问下,怎么值的返回为什么不能成为左值?

补充:不过引用返回的都很容易犯个错误,就是返回栈的变量,由于函数自动释放形参,若返回的是返回栈的变量都将出错

在问下楼上的,再解释下第二点2。与标准类型一致,


2007-08-08 03:35
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
to xieyuanchang:

其实返回是引用还是非引用,主要不是由效率确定,是由第2点,你是想你的返回值能被操作(左值),还是直接一个值而已。不过也有第3种办法,那就是返回常量引用 const type&这样就都考虑了,你仔细想一下就会发现这跟参数传递是一样的。这些都得灵活运用。
你补充的那点相当好,如你所说,不能返回局部变量的引用,同样的道理,不能返回指向局部变量的指针。因为这样的对象生命周期不在函数外。

他说的与标准类型一致,是指这个操作在标准类型上提供了怎样的形式,我们重再的时候就要按这个走。
int i,j=1,k=2;
(i=j)=k;//这样就改变了操作的先后,i=j如果不返回i的引用,那么k的值就无法付给i了
比如你重载=,就要能向上面那样用。

Fight  to win  or  die...
2007-08-08 09:58
快速回复:符号重载的问题
数据加载中...
 
   



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

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