- 操作符重载1-成员函数
所有的成员函数(除静态成员函数)都带有一个隐藏的this参数,
作为成员函数的调用者,
this不能在参数列写出来,但是在函数中可以使用, 在 图中 c2+= c1中,
c2就是this,this是一个指向c2的指针,c2 += c1, 就是将c1加到c2 上去,
在函数中,我们封装成 __doapl,这样其他函数也可以用到,__doapl是标准
库里的复数的设计代码,所有的二元重载运算符都是类似
- 返回引用的语法分析 传递者无需知道接受者是用什么形式接收
所以我们更倾向于用引用接收,我们返回 *this是一个object,接收端用什么形式
接收传递者并不知道,c3 += c2 += c1;中,以引用作为返回值,可以实现连加操作,
而如果 +=重载的返回值是void就无法实现
- 类体之外的各种定义
- 操作符重载2 非成员函数
非成员函数的重载与成员函数的重载相比,区别在于它没有this指针
作为设计者,需要应付使用者所有可能的加操作
- 临时对象
临时对象作为返回值不能被引用接收
complex() ; 类直接加小括号,创建临时对象,用完马上返回
右边当中 complex(),和complex(4,5);都是临时对象,他们的生命进行
到下一行马上就消失了
- body之外的各种定义 取正 取反
+ 重载并没有返回引用,这是标准库的代码,并没有错,但不是最好的写法,应该加&
- 操作符重载 非成员函数
<< 操作符只能被重载成全局函数,它作用在cout参数身上,不可能认识现在
才发展出来的复数类型,且返回值不能为const,因为在向os传数据的过程中,
os的状态是不断改变的,返回值是ostream 因为要实现连续输出的功能