关于重载运算符+的一个问题

ryfdizuo 2007-01-05 06:21:03
operator + ()函数不是可以定义为成员函数也可以定义为友元函数,那两种情况有什么区别?
谢谢!
...全文
223 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdlyczl 2007-01-06
  • 打赏
  • 举报
回复
重载了=,最好再重载一下+=
呵呵
todototry 2007-01-06
  • 打赏
  • 举报
回复
尽量重载成全局函数
而的并不是友元,effective C++
htqx 2007-01-06
  • 打赏
  • 举报
回复

成员定义有更多的限制, 因为默认的规格是:
operator+ ( int ) const -----> operator+ ( T const&, int ) const;

而友员就没有那么多限制,可以分别修订两个参数,做一些调整等
operator+ ( T const&, int )
operator+ ( int, T const& )

从重载的角度看, 友员都是比较灵活的.
但是,能用成员还是使用成员比较爽.
Dic4000 2007-01-06
  • 打赏
  • 举报
回复
双目运算符最好用友员函数,单目用成员函数
blackmurder 2007-01-05
  • 打赏
  • 举报
回复
如果你要把对象自己放在运算符左边,那么就不能用成员函数实现
todototry 2007-01-05
  • 打赏
  • 举报
回复
mark
Eric_Wei 2007-01-05
  • 打赏
  • 举报
回复
Member function has a latent parameter.
Friend function does't.
zhousqy 2007-01-05
  • 打赏
  • 举报
回复
恩,参数可以隐式类型转换,一个object不可以。建议看effective c++ Item19
ryfdizuo 2007-01-05
  • 打赏
  • 举报
回复
原来内部还有那么多道理呢!谢谢!
xusheng_fenglin 2007-01-05
  • 打赏
  • 举报
回复
作为成员的运算符比起作为非成员的运算符,在声明和定义时,形式上少了一个参数,这是因为c++
对所有的成员函数隐藏了了第一个参数this

同样的,重载后的运算符作为成员函数也比作为友元的函数参数多一个,拿 运算符 + 来说,在成员函数中,它第一个参数是它所属的那个对象,第二个是一个参数,而在友元函数中,两个对象都是参数
声明如下
成员函数版: SomeClass operator + (SomeClass )
友元函数版: friend SomeClass operator +(SomeClass ,SomeClass)
Someclass 为一个类名,假设这两个函数返回的都是 SomeClass 对象.
casale 2007-01-05
  • 打赏
  • 举报
回复
应该说对成员函数重载+来说,该句子相当于:
BigInt temp2 = 2.operator+(temp);
这是个错误的句子
casale 2007-01-05
  • 打赏
  • 举报
回复
假设类BigInt是个大数处理类
BigInt有BigInt(int i)构造函数
BigInt temp;
BigInt temp2 = 2 + temp;
成员函数无法将2隐式转换为BigInt,友元函数则可以

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧