定义一个时间类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;
}