运算符重载是什么???
运算符重载是什么???
运算符重载是 C++ 中一种特殊的函数重载机制,它允许我们对已有的运算符赋予新的含义以适应不同数据类型的操作。通过运算符重载,我们可以使用自定义的类或结构体类型进行运算,从而提高代码的可读性和整洁性。运算符重载的实质是编写一个或多个特殊的成员函数或友元函数,这些函数负责处理特定运算符的操作。
举个例子:
#include <iostream>
using namespace std;
struct node
{
int a;
int b;
string s;
node(){};
node(int aa,int bb,string ss)
{
a=aa;
b=bb;
s=ss;
}
/* 运算符重载 */
bool operator <(const node x) const
{
return a+b < x.a+x.b;
}
};
int main()
{
cout<<(node(20,23,"RainCQwQ")<node(20,24,"__Polaris__"))<<endl;
cout<<(node(20,2000,"Zhai0915")<node(19,2001,"miaoyu2022"));
return 0;
}
# output
1
0
在这个例子中,我们看到,先定义了一个结构体 \(node\),然后将 \(node\) 的小于定义为结构体中 \(node1.a + node1.b < node2.a + node2.b\)。
运算符重载的两者方法
- 重载为类成员函数来实现;
- 重载为友元函数(全局函数)来实现;
其中的联系与区别
- 成员函数具有
this指针,友元函数没有this指针; - 两者使用方法相同;
- 两者实现方式不同,传递参数不同,应用场景不同;
方法选择
- 当无法修改左操作数的类时,使用友元函数进行重载;
=,[],()和->操作符只能通过成员函数进行重载;<<和>>需要使用友元函数实现;- 友元函数重载运算符常用于操作符左右数据类型不同的情况,如1+a(在成员函数中不合法),但a+1合法。

浙公网安备 33010602011771号