DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

一、运算符重载的四项基本原则:

▍不可臆造运算符。

▍运算符原有操作数的个数、优先级和结合性不能改变。

▍操作数中至少一个是自定义类型。

▍保持运算符的自然含义。

==============================

二、运算符重载的两种形式:

▍成员函数形式(隐含一个参数 this 指针):

1)双目运算符:参数一个

2)单目运算符:不能显示的声明参数

▍友元函数形式(不存在隐含的参数 this 指针)


1)双目运算符:两个参数

2)单目运算符:一个参数

==============================

三、成员函数和友元函数形式的另一差异:

1)友元函数形式:能够接受左参数和右参数的隐式转换

2)成员函数形式:只允许右参数的隐式转换

例如:

class CString{

   public :

      CString(char* str);

      ...

   private :

      char* m_pStr;

};

=.=CString的构造函数参数为一个char:

友元函数形式的 operator+(const CString&,const CString&),char+CString和CString+char都能正常工作;

成员函数形式的 CString::operator(const CString& rhs),只能执行 CString+char。

--------------------------------

隐式转换由于临时变量的增加,效率不高,建议定义多个运算符的友元重载版本:

CString& operator+(const CString&, const CString&); 

CString& operator+(const char&, const CString&);

CString& operator+(const CString&, const char&);

==============================

四、一般而言,双目运算符,最好重载为友元函数;对于单目运算符,最好重载为成员函数。
特例:

1)只能重载为成员函数:“=”、“()”、“[ ]”、“->”等,与 this(自身)关联太多。

2)只能重载为友元函数:只能重载为友元函数:输出运算符 << ,第一个操作符一定是 ostream 。

friend ostream& operator<<(ostream& out, const Complex& c);

posted on   DoubleLi  阅读(251)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2018-05-07 【推荐】Nginx基础知识之————多模块(非覆盖安装、RTMP在线人数实例安装测试)
2018-05-07 流媒体技术学习笔记之(三)Nginx-Rtmp-Module统计某频道在线观看流的客户数
2018-05-07 Nginx 的 RTMP 模块的在线统计功能 stat 在 multi-worker 模式下存在 Bug
2018-05-07 让你的 Nginx 的 RTMP 直播具有统计某频道在线观看用户数量的功能
2018-05-07 「自己开发直播」rtmp-nginx-module实现直播状态、观看人数控制
2018-05-07 HTML5视频直播及H5直播扫盲
2018-05-07 H5浏览器播放RTMP直播流实现切换
点击右上角即可分享
微信分享提示