社区
C++ 语言
帖子详情
关于重载运算符+的一个问题
ryfdizuo
2007-01-05 06:21:03
operator + ()函数不是可以定义为成员函数也可以定义为友元函数,那两种情况有什么区别?
谢谢!
...全文
223
12
打赏
收藏
关于重载运算符+的一个问题
operator + ()函数不是可以定义为成员函数也可以定义为友元函数,那两种情况有什么区别? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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,友元函数则可以
定义
一个
复数类Complex,
重载运算符
+,使之能用于复数的加法运算,要求将运算符+函数重载为非成员、非友元的普通函数;
重载运算符
-、采用友元函数方式;
重载运算符
X、/,以成员函数方式实现。
定义
一个
复数类Complex,
重载运算符
+,使之能用于复数的加法运算,要求将运算符+函数重载为非成员、非友元的普通函数;
重载运算符
-、采用友元函数方式;
重载运算符
X、/,以成员函数方式实现。 分析当参加运算+的两个...
重载运算符
++ 和 --
重载运算符
++ 和 -- 如何重载增量运算符 ++ 和 -- 运算符++和—有前置和后置两种形式,如果不区分前置和后置,则使用operator++( )或operator--( )即可;否则,要使用operator++( )或operator--( )来重载前置...
C++
重载运算符
友元函数作为
重载运算符
重载运算符
+
以友元函数作为
重载运算符
的方式
重载运算符
+ 下面的例子来自于课本 #include using namespace std; class Complex { public: Complex() { real = 0; imag = 0; } Complex(double
定义计数器Counter类,对其
重载运算符
+
//定义计数器Counter类,对其
重载运算符
+ 。 #include<iostream> #include<bits/stdc++.h> using namespace std; class counter { private: int i; public: counter(){} counter(int p){i=p;} ...
深度理解前置运算符++、--后置运算符++、--的重载(一)
前置运算符++、–后置运算符++、–的重载是C++多态性的难点。清华大学出版社出版的C++程序设计(郑莉主编)的例题8-2比较详尽地说明了++前置和后置重载的实现方式。本文再补充–前置和后置重载方式。如果++和–分别...
C++ 语言
64,281
社区成员
250,470
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章