给出下面的基类Time的框架如下:
class Time
{ protected:
int second;
int minute;
int hour;
public:
void operator++();
void operator—();
}
建立一个派生类Time_12hours,用于表示十二进制时间,增加以下成员数据:
string type;//标识为12进制时间,type=”12-hours-time”
string interval;//标识为AM或者PM,interval=”AM”或interval=”PM”
增加以下成员函数:
void operator++();
void operator—();
建立一个派生类Time_24hours,用于表示二十四进制时间,增加以下成员数据:
string type;//标识为24进制时间,type=”24-hours-time”
增加以下成员函数:
void operator++();
void operator—();
生成上述类并编写主函数,根据输入的初始时间信息、自增或者自减类型、自增或者自减次数,输出其最后时间信息。
输入格式:测试输入包含多个测试用例,一个测试用例为一行,每行共五个数字,第一个数字为进制,121表示输入为12进制AM时间,122表示输入为12进制PM时间,输入为24表示输入为24进制时间,第二个数字为hour,第三个数字为minute,第四个数字为second,第五个字符为运算类型,+表示自增,-表示自减,第六个数字为运算次数,0表示测试用例结束。
输入样例:
121 11 59 59 + 3
24 11 59 59 + 3
122 11 59 59 + 3
122 00 00 00 – 3
121 00 00 00 – 5
24 00 00 00 – 1
0
输出样例:
PM 00:00:02
12:00:02
AM 00:00:02
AM 11:59:57
PM 11:59:55
class Time
{ protected:
int second;
int minute;
int hour;
public:
void operator++();
void operator—();
}
建立一个派生类Time_12hours,用于表示十二进制时间,增加以下成员数据:
string type;//标识为12进制时间,type=”12-hours-time”
string interval;//标识为AM或者PM,interval=”AM”或interval=”PM”
增加以下成员函数:
void operator++();
void operator—();
建立一个派生类Time_24hours,用于表示二十四进制时间,增加以下成员数据:
string type;//标识为24进制时间,type=”24-hours-time”
增加以下成员函数:
void operator++();
void operator—();
生成上述类并编写主函数,根据输入的初始时间信息、自增或者自减类型、自增或者自减次数,输出其最后时间信息。
输入格式:测试输入包含多个测试用例,一个测试用例为一行,每行共五个数字,第一个数字为进制,121表示输入为12进制AM时间,122表示输入为12进制PM时间,输入为24表示输入为24进制时间,第二个数字为hour,第三个数字为minute,第四个数字为second,第五个字符为运算类型,+表示自增,-表示自减,第六个数字为运算次数,0表示测试用例结束。
输入样例:
121 11 59 59 + 3
24 11 59 59 + 3
122 11 59 59 + 3
122 00 00 00 – 3
121 00 00 00 – 5
24 00 00 00 – 1
0
输出样例:
PM 00:00:02
12:00:02
AM 00:00:02
AM 11:59:57
PM 11:59:55
23:59:59
#include<iostream>
#include<iomanip>
using namespace std;
class Time
{
protected:
int second;
int minute;
int hour;
int sum;
public:
friend istream& operator >> (istream&,Time&);
friend ostream& operator << (ostream&,Time&);
void operator++();
void operator--();
};
istream& operator >> (istream& in,Time& a)
{
in>>a.hour>>a.minute>>a.second;
a.sum=(a.hour*60+a.minute)*60+a.second;
return in;
}
ostream& operator << (ostream& out,Time& a)
{
out<<setiosflags(ios::right)<<setfill('0')<<setw(2)<<a.hour<<":"<<setfill('0')<<setw(2)<<a.minute<<":"<<setw(2)<<a.second<<endl;
return out;
}
void Time::operator++()
{
sum++;
second=sum%60;
minute=sum/60%60;
hour=sum/3600%24;
}
void Time::operator--()
{
if(sum==0)
sum=86400;
sum--;
second=sum%60;
minute=sum/60%60;
hour=sum/3600%24;
}
class Time_12hours:public Time
{
string type;//标识为12进制时间,type=”12-hours-time”
string interval;//标识为AM或者PM,interval=”AM”或interval=”PM”
public:
void set(int n){if(n==122) sum+=43200;}
void operator++();
void operator--();
friend ostream& operator << (ostream& out,Time_12hours& a);
};
void Time_12hours::operator++()
{
Time::operator++();
}
void Time_12hours::operator--()
{
Time::operator--();
}
ostream& operator << (ostream& out,Time_12hours& a)
{
if(a.hour>=12)
a.interval="PM ",a.hour-=12;
else
a.interval="AM ";
out<<a.interval<<setiosflags(ios::right)<<setfill('0')<<setw(2)<<a.hour<<":"<<setw(2)<<a.minute<<":"<<setw(2)<<a.second<<endl;
return out;
}
int main()
{
Time_12hours t12;
Time t24;
int act,n,i;
char flag;
cin>>act;
while(act!=0)
{
if(act>100)
{
cin>>t12;
t12.set(act);
getchar();
cin>>flag>>n;
if(flag=='+')
while(n--)
++t12;
else
while(n--)
--t12;
cout<<t12;
}
else
{
cin>>t24;
getchar();
cin>>flag>>n;
if(flag=='+')
while(n--)
++t24;
else
while(n--)
--t24;
cout<<t24;
}
cin>>act;
}
return 0;
}