重载运算符是对运算符进行重新定义,使我们能够对特殊/自定义的数据结构进行运算操作。例如:在正常情况下,自定义的结构体之间是无法进行 == 、< 、> 等等比较的,但是我们可以通过重载运算符来达到 == 判断两个结构体p1、p2之间是否相等。
重载运算符的限制:
- 只能对系统重已有的运算符进行重载,不能重载自定义的运算符
- 不能进行重载的运算符:
::
(作用域解析),.
(成员访问),.*
(通过成员指针的成员访问),?:
(三目运算符) - 重载后的运算符,其运算优先级,运算操作数,结合方向不得改变
- 对
&&
(逻辑与)和||
(逻辑或)的重载失去短路求值
在类体/结构体中声明(定义)需要重载的运算符,声明方式跟普通的成员函数一样,只不过运算符重载函数的名字是“operator紧跟一个 C++ 预定义的操作符”,示例用法如下(Edge和Person是我们定义的结构体):
struct Edge{
int a,b,w;
bool operator< (const Edge &e){
return w < e.w;
}
}edge[M];
struct Person{
int name,age;
bool operator==(const person &p)
{
if (this->age == p.age)
{
return true;
}
return false;
}
};