0 重载限制
C++提供的重载功能可以使我们自定义的类型进行包括算术运算在内的各种运算,极大地方便了代码的编写,但是C++中运算符重载需要满足一定的规则。
- 重载后的运算符必须至少有一个操作数是用户定义的类型,可以防止用户为标准类型重载运算符。比如,不能将减法运算符重载为计算两个double值的和。
- 使用运算符不能违反原来的句法规则。不能将2目运算符重载为1目运算符。
- 不能创建新的运算符。
1 不能重载的运算符
符号 | 意义 |
sizeof | sizeof运算符 |
. | 成员运算符 |
* | 成员指针运算符 |
:: | 作用域解析运算符 |
?: | 条件运算符 |
const_cast | 强制类型转换运算符 |
dynamic_cast | 强制类型转换运算符 |
reinterpret_cast | 强制类型转换运算福 |
static_cast | 强制类型转换运算符 |
typeid | RTTI运算符 |
2 只能通过成员函数重载的运算符
- 赋值运算符:=
- 函数调用运算符:()
- 下标运算符:[]
- 通过指针访问类成员的运算符:->
3 重载运算符调用方式
- 程序会根据数据类型自行判断该调用普通运算符还是调用重载后的版本
- 可以通过函数调用的方法,也可以通过运算符的方法,具体如下:
假设MyClass是自定义的类,a,b是其两个不同的对象,现需要调用重载运算符+将两个对象相加。可以显式调用函数:a = a.operator(b);也可以这样:a = a + b