C++超详细讲解操作符的重载
一、需要解决的问题
下面的复数解决方案是否可行?
下面看一下复数的加法操作:
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 32 33 34 35 36 |
|
输出结果如下:
思考
Add 函数可以解决 Complex 对象相加的问题,但是 Complex 是现实世界中确实存在的复数,并且复数在数学中的地位和普通的实数相同。
为什么不能让+操作符也支持复数相加呢?这个就涉及到操作符的重载。
二、操作符重载
C++ 中的重载能够扩展操作符的功能
操作符的重载以函数的方式进行
本质
用特殊形式的函数扩展操作符的功能
- 通过 operator 关键字可以定义特殊的函数
- operator 的本质是通过函数重载操作符
语法
下面来初探一下操作符重载:
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 32 33 34 35 36 |
|
输出结果如下:
可以将操作符重载函数定义为类的成员函数
- 比全局操作符重载函数少—个参数(左操作数)
- 不需要依赖友元就可以完成操作符重载
- 编译器优先在成员函数中寻找操作符重载函数
下面来实现在成员函数中重载操作符:
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
|
输出结果如下:
这个说明编译器优先在成员函数中寻找操作符重载函数
故上述代码可以直接写成:
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 32 33 34 35 |
|
三、小结
- 操作符重载是 C++ 的强大特性之一
- 操作符重载的本质是通过函数扩展操作符的功能
- operator 关键字是实现操作符重载的关键
- 操作符重载遵循相同的函数重载规则
- 全局函数和成员函数都可以实现对操作符的重载
