友元函数、成员函数...

BirdWang 2001-11-14 02:29:17

我想写一个类的比较函数,参考CString时却发现以下函数的定义:


API 函数:
bool AFXAPI operator==(const CString& s1, const CString& s2);

CString 的友元函数:
friend CString AFXAPI operator+(const CString& string1,const CString& string2);

CString 的成员函数:
const CString& operator+=(const CString& string);

他们到底有什么区别,什么原因要这样定义他们的类别
我要定义我的比较函数 > 为友元函数,可是这是为什么?
谁可以告诉我,谢了。
...全文
56 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
felixx 2001-11-14
  • 打赏
  • 举报
回复
我说另外一点:
重载有两种方法,将操作符重载为成员函数;将操作符重载为友员函数。
对于双目操作符,
作为成员函数重载后,其左操作数为对象本身,右操作数为重载函数的参数;
作为友员函数重载,则左右操作数就是函数参数的顺序。
对于单目运算符,如“++”,要注意区分左右。
cd7809 2001-11-14
  • 打赏
  • 举报
回复
可为什么都要加上&呢?

operator+(const double, const ClassType ) 不行吗?
树木 2001-11-14
  • 打赏
  • 举报
回复
如果能定义为成员函数就可以定义为成员函数。
定义为友元函数一般是为了符合运算符的一些性质,譬如加法的交换性。
举例,一个类与一个简单类型的数相加:
用成员函数operate + (const double&)只能表示“对象+简单类型变量”的形式,
只有加上友元函数operate +(const double&,const classtype&)才能表示出“简单类型变量+对象”的形式。这样你重载的运算符才更理想。
主要从运算符重载本身的定义与你的需求去设计吧!
BirdWang 2001-11-14
  • 打赏
  • 举报
回复
哦,错了,应该是API函数。
仿第一个函数写的。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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