重载运算符
“运算符重载”常用语解决结构体或自定义数据类型的加法、减法等特殊含义的运算。
运算符重载的一般格式为:
类型名 operator 运算符 (const 类型名 变量) const {
...
}
例如:
要实现n组数据(输入格式为:时 分 秒)的加法,就可以将 ‘+’ 这个运算符重载,方面我们加减。
最后输出的时候还要用 [时 分 秒] 的格式输出。
代码如下:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
struct worktime{
int h,m,s;
worktime operator +(const worktime x) const {
worktime res;
res.s = (s + x.s) % 60;
res.m = ((s + x.s) / 60 + m + x.m) % 60;
res.h = ((s + x.s) / 60 + m + x.m) / 60 + h + x.h;
return res;
}
};
int main() {
worktime stu, sum;
int n;
scanf("%d", &n);
sum.s = sum.m = sum.h = 0;
for(int i = 1 ;i <= n ; i ++) {
scanf("%d%d%d", &stu.h, &stu.m, &stu.s );
sum = sum + stu;
}
printf("%d小时%d分钟%d秒",sum.h, sum.m, sum.s);
return 0;
}
这段代码输入的是n个时间[时 分 秒],
输出的是这n个时间的总和,也是按照时分秒的格式输出。
用到运算符重载的是这一段:
struct worktime{
int h,m,s;
worktime operator +(const worktime x) const {
worktime res;
res.s = (s + x.s) % 60;
res.m = ((s + x.s) / 60 + m + x.m) % 60;
res.h = ((s + x.s) / 60 + m + x.m) / 60 + h + x.h;
return res;
}
};
嗯,很简单。