C++运算符重载——时间换算

定义一个时间类time,内有数据成员hour,minute,second,另有成员函数:构造函数用于初始化数据成员,输出函数,运算符重载+(加号),。编写主函数:创建时间对象,再输入秒数 n,通过运算符重载+(减号),计算该时间再过 n 秒后的时间值,时间的表示形式为时:分:秒,超过 24 时从 0 时重新开始计时。

  测试输入包含若干测试用例,每个测试用例占一行。当读入0 0 0 0时输入结束,相应的结果不要输出。

       输入输出示例:括号内为说明

   0 0 1 59 (时间为0:0:1,秒数n=59)

   11 59 40 30 (时间为11:59:40,秒数n=30)

   23 59 40 3011 (时间为23:59:40,秒数n=3011)

   0 0 0 0

   输出:

  time:0:1:0↙(0:0:01加上59秒的新时间)   

  time:12:0:10↙(11:59:40加上30秒的新时间)

  time:0:49:51↙(23:59:40加上3011秒的新时间)

代码实现:将单目运算符重载(时钟类)的代码进行了一些改动

#include <iostream>
#include <string>
using namespace std;


class Clock {
public:
	Clock(int NewH = 0, int NewM = 0, int NewS = 0,int t=0);
	void ShowTime();
	friend Clock operator+(Clock& op);         //前置单目运算符重载
private:
	int Hour, Minute, Second,t;
};

Clock::Clock(int NewH, int NewM, int NewS,int Newt) {
	Hour = NewH;
	Minute = NewM;
	Second = NewS;
	t = Newt;
}
void Clock::ShowTime() {
	cout <<"time:"<< Hour << ":" << Minute << ":" << Second << endl;
}

Clock operator+(Clock& op) {
	//Clock T;
	op.Second=op.Second+op.t;
	if(op.Second<0){         //存在t<0的情况
	  while(op.Second<0){
	  op.Second=op.Second+60;
	  op.Minute--;
	  while(op.Minute < 0) {
			op.Minute = op.Minute + 60;
			op.Hour--;
			while(op.Hour < 0) {
				op.Hour = op.Hour+24;
			}
		}
	  }
	}
	//else{
	while(op.Second >= 60) {
		op.Second = op.Second - 60;
		op.Minute++;
		while(op.Minute >= 60) {
			op.Minute = op.Minute - 60;
			op.Hour++;
			while(op.Hour >= 24) {
				op.Hour = op.Hour-24;
			}
		}
	}
	//}
	return op;
}



int main() {
	int h, m, s,t;
	cin >> h >> m >> s>>t;
	while (h != 0 || m != 0 || s != 0 || t != 0) {
		Clock a(h, m, s, t);

		(+a).ShowTime();
		//(a++).ShowTime();
		//a.ShowTime();
		cin >> h >> m >> s >> t;
	}
	system("pause");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值