什么是重载运算符
重载运算符是通过对运算符的重新定义,使得其支持特定数据类型的运算操作。重载运算符是重载函数的特殊情况。
C++自带的运算符,最初只定义了一些基本类型的运算规则。当我们要在用户自定义的数据类型上使用这些运算符时,就需要定义运算符在这些特定类型上的运算方式。
重载运算符的限制
- 只能对现有的运算符进行重载,不能自行定义新的运算符。
- 以下运算符不能被重载:
::
(作用域解析),.
(成员访问),.*
(通过成员指针的成员访问),?:
(三目运算符)。 - 重载后的运算符,其运算优先级,运算操作数,结合方向不得改变。
- 对
&&
(逻辑与)和||
(逻辑或)的重载失去短路求值。
重载运算符举例
我们以 +
为例.
首先定义一个结构体 Node
struct Node
{
int a,b;
}k1,k2;
然后我们想对 $k1$ 与 $k2$ 进行运算,想用 $k1+k2$ 表示其中的 $a$ 相加, $b$ 也相加,然后再 $mod$ 一个值。写一次还好,写多了就会很麻烦,除了定义一个结构体,我们还可以选择重载运算符。例如:
struct Node {
int a, b;
Node () {a = b = 0; return ;}
inline Node operator + (const Node p) const {
Node t;
t.a=a+p.a;
t.b=a+p.b;
return t;
}
}
然后就可以用 $k1+k2$ 表示以上操作了!