鱼C论坛

 找回密码
 立即注册
查看: 3731|回复: 1

如何理解运算符重载

[复制链接]
发表于 2013-2-19 04:48:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在学编程中, 运算符重载较难, 与常规理解相差大, 能否用通俗比喻描述一下其定义及使用
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-2-19 08:27:09 | 显示全部楼层
运算符提供了一种比函数调用更“高级”的抽象,使程序员可以数学表达式来表达自己的思想,但本质上运算符效果和函数是一样的,比如:
对class  Complex{ ... };
Complex a,b,c;
a = b+c;也可以实现为a = Add(a,b);
观察上述两式区别,我们知道要实现运算符+只要将该运算符映射为某个函数,C++规定,该函数的名字叫做operator+
所以b+c实际就是operator+(b,c)为了实现该语义,我们要写个函数
Complex  operator+( const  Complex&a, const  Complex&b);来说明如何实现加法的语义。
对于双目运算符,b+c除了可以理解为operator+(b,c)外,还可以理解为b.operator+(c);如过这样实现的话,operator+就应该是对象b 的一个成员函数,并且它只有一个参数(因为在b.operator+(c);中,另一个参数总是出现在.的左边)我们把最左边的操作数称为左操作数,不是最左边的操作数称为右操作数。
接下来,再看下其它的双目运算符,如:
(1) a<b ;可以理解为operator<(a,b);也可以理解为a.operator<(b)
(2) cout<<a;可以理解为operator<<(cout,a);也可以理解为cout.operator<<(a)但因为cout是ostream类,我们不能向该类增加成员函数,故这种表示不可实现。
  
还有很多其它内容,相信看了以上的简单描述后你再去看书应该能明白很多。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-8-8 05:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表