《C++快速入门》学习笔记
进度:P28
例:实现复数相加
1、 重载运算符的函数不能有默认的参数
2、 必须和用户定义的自定义类型的对象一起使用,其参数只有应该有一个是类的对象或类对象的引用(参数不能全是C++的标准类型,是为了防止用户修改用于标准类型结构的运算符性质)
运算重载符实际上有两个参数,但由于重载函数是Complex类中的成员函数,有一个参数是隐含着的,运算符函数是用this指针隐式地访问类对象的成员。本例的c1+c2,编译系统把它解释为c1.operator+(c2)。
法一:
![ed01362410a6b5a651e808e5b9c4ef14.png](https://i-blog.csdnimg.cn/blog_migrate/fa938b95e034360bca1b2ead5ec1ac34.jpeg)
法二:
把运算符重载函数作为类友元函数。
因为运算符函数要访问Complex类对象的成员,一个普通函数是没有权力访问私有成员的。由于友元的使用会破坏类的封装,因此原则上尽量把运算符函数作为成员函数。
![7d27adbb5c572cea3d3ddf0143539700.png](https://i-blog.csdnimg.cn/blog_migrate/29cb33189ca7ebafa2e5f258c63ae332.jpeg)
例:实现有理数的加减乘除
1、 对于Rational类来说,加减乘除直接定义类内的重载即可;而对于<
2、 在处理运算时,减法看作加法的逆运算,除法看作乘法的逆运算
3、 我们首先对分数进行约分化简,然后计算结果时只需要再判断是否能够整除为整数即可
4、 为了输出时代码的简洁性,我们对<
![c7e070c4cdc305c6a198742c38ea12d8.png](https://i-blog.csdnimg.cn/blog_migrate/c1f5025bb8b6e52a9b457271d17474b2.jpeg)
![0bba1363d8b79f815268699175fcf68e.png](https://i-blog.csdnimg.cn/blog_migrate/3bc88cfebbbe8f51ca22daf46877d597.jpeg)
![9714130f6ffa503cd7fe54e70db034c5.png](https://i-blog.csdnimg.cn/blog_migrate/c9537fbc3670916deab8beb354a8fedb.jpeg)
![d3ae00ed2e8aa1bae79a20c3d2ed7d42.png](https://i-blog.csdnimg.cn/blog_migrate/484b7dab549a646ad7725bc4be1babe7.jpeg)
写在后面:
花了一上午学清楚了运算符重载(我真想不明白上学期这一块是怎么划水划过去的)
对于ostream&这个东西,ostream很好理解,后面的&符号很让我摸不着头脑,所以去问了问dalao。第一次意识到&是和前面的类连在一起的(之前VS给我自动缩进了我也没意识到啥)
……有被菜到。
这一次的有理数运算的代码写得过于漂亮了,不论是逆运算的角度还是最后重载<
好了今天也会继续努力的orz
![9b3e4f39062be1932a3380f43dbf47fe.png](https://i-blog.csdnimg.cn/blog_migrate/fc759da5a7509bb2071376a02bf71348.png)
![c62b1ef160bf1c995024c6096f780e2b.png](https://i-blog.csdnimg.cn/blog_migrate/9b3534767c6490c6319abaabc55af6aa.jpeg)
IT双侠的咕咕咕日常
排版:咸哥
内容:咸哥
特别鸣谢:小甲鱼、拓哥