重载运算符

“运算符重载”常用语解决结构体或自定义数据类型的加法、减法等特殊含义的运算。

运算符重载的一般格式为:

类型名 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;
	}
};

嗯,很简单。

posted @ 2020-07-01 20:30  Lvlb2333  阅读(93)  评论(0编辑  收藏  举报