分数类+重载为成员函数和友元函数出现二义性_C++快速入门学习笔记4|运算符重载...

《C++快速入门》学习笔记

进度:P28

例:实现复数相加

1、 重载运算符的函数不能有默认的参数

2、 必须和用户定义的自定义类型的对象一起使用,其参数只有应该有一个是类的对象或类对象的引用(参数不能全是C++的标准类型,是为了防止用户修改用于标准类型结构的运算符性质)

运算重载符实际上有两个参数,但由于重载函数是Complex类中的成员函数,有一个参数是隐含着的,运算符函数是用this指针隐式地访问类对象的成员。本例的c1+c2,编译系统把它解释为c1.operator+(c2)。

法一:

ed01362410a6b5a651e808e5b9c4ef14.png

法二:

把运算符重载函数作为类友元函数。

因为运算符函数要访问Complex类对象的成员,一个普通函数是没有权力访问私有成员的。由于友元的使用会破坏类的封装,因此原则上尽量把运算符函数作为成员函数。

7d27adbb5c572cea3d3ddf0143539700.png

例:实现有理数的加减乘除

1、 对于Rational类来说,加减乘除直接定义类内的重载即可;而对于<

2、 在处理运算时,减法看作加法的逆运算,除法看作乘法的逆运算

3、 我们首先对分数进行约分化简,然后计算结果时只需要再判断是否能够整除为整数即可

4、 为了输出时代码的简洁性,我们对<

c7e070c4cdc305c6a198742c38ea12d8.png 0bba1363d8b79f815268699175fcf68e.png 9714130f6ffa503cd7fe54e70db034c5.png d3ae00ed2e8aa1bae79a20c3d2ed7d42.png

写在后面:

花了一上午学清楚了运算符重载(我真想不明白上学期这一块是怎么划水划过去的)

对于ostream&这个东西,ostream很好理解,后面的&符号很让我摸不着头脑,所以去问了问dalao。第一次意识到&是和前面的类连在一起的(之前VS给我自动缩进了我也没意识到啥)

……有被菜到。

这一次的有理数运算的代码写得过于漂亮了,不论是逆运算的角度还是最后重载<

好了今天也会继续努力的orz

9b3e4f39062be1932a3380f43dbf47fe.png c62b1ef160bf1c995024c6096f780e2b.png

IT双侠的咕咕咕日常

排版:咸哥

内容:咸哥

特别鸣谢:小甲鱼、拓哥

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值