第十四章 重载运算和类型转换
使用重载的运算符本质上是进行了一次函数调用
Tips
- 尽量不重载&&, ||, 逗号, 取址符
重载 <<
- 必须是非成员运算符
- 通常第二个参数为const Type &item, 引用避免拷贝, const保证元素不会更改
- 通常返回类型统一为ostream &
重载 >>
- 必须是非成员运算符
- 需要处理输入可能失败的情况
重载=
- 通常为成员运算符
- 除了拷贝赋值和移动赋值, 还提供了接受花括号元素(initializer_list)的赋值
重载下标运算符
- 必须是成员运算符(因为下标运算符返回的是引用)
重载递增递减运算符
- 为了区分前置和后置运算符, 在声明后置运算符时会加上一个默认为0的int类型形参
- 后置版本返回值, 而不是引用
重载解址符和箭头引用符
- 必须是成员运算符
->
访问成员的性质不能改变, 因此返回值必然是一个可以使用*的类型
重载函数调用运算符
- 如果重载了(), 那么可以像使用函数一样使用这个类的对象
- lambda表达式就是一个函数对象
类型转换运算符
operator type() const
必须定义为类的成员函数, 没有返回类型, 没有形参, 通常后面有一个const
返回值可以是任何函数返回类型(所以不能是数组或函数, 但可以是指针)
类型转换运算的前后可能有隐式类型转换
因此, 定义类型转换可能导致意想不到的错误
可以显式定义类型转换符号, 此时也必须对应使用显式的类型转换static_cast
(var), 除非类型转换发生在条件语句中 要注意避免二义性的发生
- Title: 第十四章 重载运算和类型转换
- Author: Huan Lee
- Created at : 2023-08-20 14:14:08
- Updated at : 2024-02-26 04:53:15
- Link: https://www.mirthfullee.com/2023/08/20/notion-第十四章 重载运算和类型转换-08ade27c/
- License: This work is licensed under CC BY-NC-SA 4.0.