operator是C++中的关键字,表示一个运算符函数,用于支持用户自己定义的class的基本操作,如比较大小、判断是否相等。
举一个简单易懂的例子,加法运算符“+”对于整数、单精度数、双精度数等的操作是不同的,而C++语言本身已经对不同类型的变量进行了重载运算符,因此+能够用于int、float、double以及其他内部定义的变量。
操作符重载的目的:扩展C++原先已经提供的运算符的适用范围,以用于类所表示的抽象数据类型。同一个运算符对不同类型的操作数进行的操作是不同的。
操作符被重载的基本前提有三:只为自定义的类型重载操作符、不能对操作符的语法(如优先级、结核性、操作数个数、语法结构)和语义进行颠覆、不能引入新的自定义操作符。
例题:通过构建结构体重载运算符排序学生成绩,使得按总分自上而下的顺序排列,如果总分相等则数学成绩高的排在前面
代码实现如下:
#include<iostream>
#include<algorithm>
using namespace std;
struct score {
int math, eng;
bool operator<(const score& cmp)const {
return math + eng == cmp.math + cmp.eng ? math > cmp.math:math + eng > cmp.math + cmp.eng;
}
}a[50];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i].math >> a[i].eng;
}
sort(a, a + n);
for (int i = 0; i < n; i++) {
cout << a[i].math << " " << a[i].eng << endl;
}
return 0;
}