| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4331 人关注过本帖, 1 人收藏
标题:为什么有些运算符重载不能重载为友元函数
只看楼主 加入收藏
rwyangguang
Rank: 2
等 级:论坛游民
帖 子:23
专家分:46
注 册:2009-7-7
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:5 
为什么有些运算符重载不能重载为友元函数
有些运算符  如 :=,[]不能重载用友元重载    为什么    帮忙解释下如何区分用友元还成员重载
搜索更多相关主题的帖子: 运算符 函数 重载 
2010-06-02 19:20
刚开始吧
该用户已被删除
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-06-02 20:25
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:0 
这是规则,我们只能遵守游戏规则了。

南国利剑
2010-06-02 20:31
又见江南
Rank: 2
等 级:论坛游民
帖 子:2
专家分:20
注 册:2010-6-1
收藏
得分:20 
前面的问题是C++语法规定的
2010-06-02 20:56
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:0 
第一个问题:
    很难解释,例如说是为了安全机制(混淆底层)、防止二义性、重载没多大用 (@!@)... ...
    说白了就是LS们说的规则问题,很多时候专牛角尖挺好,但有的时候只需知道就好,想多了自己头痛。
第二个问题:
    (摘自网上)
(1) 一般情况下,单目运算符最好重载为类的成员函数;双目运算符则最好重载为类的友元函数。

(2) 以下一些双目运算符不能重载为类的友元函数:=、()、[]、->。

(3) 类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。

(4) 若一个运算符的操作需要修改对象的状态,选择重载为成员函数较好。

(5) 若运算符所需的操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选用友元函数。

(6) 当运算符函数是一个成员函数时,最左边的操作数(或者只有最左边的操作数)必须是运算符类的一个类对象(或者是对该类对象的引用)。如果左边的操作数必须是一个不同类的对象,或者是一个内部 类型的对象,该运算符函数必须作为一个友元函数来实现。

2010-06-02 22:09
gaoce227
Rank: 4
来 自:山东
等 级:业余侠客
帖 子:134
专家分:218
注 册:2008-4-5
收藏
得分:0 
楼上正解。具体参考谭老师的《C++程序设计》,别钻牛角尖!!!

要点说明:
按照类的封装,一般声明为成员函数,但在双目运算符中,如果左右两侧的操作数不是属于同个类的两个对象,那么就完蛋了。这可能是双目一般用友元重载的因素之一。

[ 本帖最后由 gaoce227 于 2010-6-5 15:36 编辑 ]
2010-06-05 15:31
快速回复:为什么有些运算符重载不能重载为友元函数
数据加载中...
 
   



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

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