重载运算符与友元,有些困惑,谁能指点下,没有分加的哟!呵呵

sjsunshinesj 2009-08-10 09:36:44
在书中看到有一些类
例如:
第一种
Class CDemo
{
CDemo operator + (CDemo&);
CDemo& operator ++();
};
第二种
Class CDemo
{
friend CDemo operator + (CDemo&,CDemo&);
friend CDemo& operator ++(CDemo&);
}
这两种一种是重载一种是友元的重载,在什么情况下用第一种,或者又在什么情况下用第二种呢?
...全文
101 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
billow_zhang 2009-08-10
  • 打赏
  • 举报
回复
你可以参考 More effective C++ 的22条,按照这一条, 是在类内重载 += 操作符,然后,再在类外,利用 +=操作重载 + 操作符,至于++操作符,显然适合于类内,如下面这样:

Class CDemo
{
public:
CDemo(const CDemo&);

CDemo& operator += (const CDemo& rhs);
CDemo& operator ++();
};

const CDemo operator+(const CDemo& lhs, const CDemo& lhs)
{
return CDemo(lhs) += rhs;
}

注意,这个类外重载+操作符的函数的返回值为const.具体的理由在Effective C++的条款21中有说明.
ericming200409 2009-08-10
  • 打赏
  • 举报
回复
一般的运算符用两者都可以实现,只是实现的参数个数不一样而已,但是也有的运算符必须以类成员函数的形式实现,比如=

65,208

社区成员

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

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