请完善时间类,使其同时支持时间常量和变量对象的输出、读取、读取时/分/秒和求总秒数。
#include <iostream>
#include <iomanip>
using namespace std;
/* 你提交的代码将被嵌在这里 */
int main()
{
int h, m, s;
cin >> h >> m >> s;
const MYTIME a(h, m, s);
cin >> h >> m >> s;
MYTIME b(h, m, s);
a.Output();
cout << endl;
a.Get(h, m, s);
cout << h << ' ' << m << ' ' << s << endl;
cout << a.Hour() << ' ' << a.Minute() << ' ' << a.Second() << endl;
cout << a.TotalSecond() << endl;
b.Output();
cout << endl;
b.Get(h, m, s);
cout << h << ' ' << m << ' ' << s << endl;
cout << b.Hour() << ' ' << b.Minute() << ' ' << b.Second() << endl;
cout << b.TotalSecond() << endl;
return 0;
}
输入样例
8 30 45
21 47 16
输出样例
Create 08:30:45
Create 21:47:16
08:30:45
8 30 45
8 30 45
30645
21:47:16
21 47 16
21 47 16
78436
Destroy 21:47:16
Destroy 08:30:45
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
答案
class MYTIME
{
public:
MYTIME(int h=0,int m=0,int s=0);
~MYTIME();
void Input();
void Output() const;
void Set(int h=0,int m=0,int s=0);
void Hour(int h);
void Minute(int m);
void Second(int s);
void Get(int &h,int &m,int &s) const;
int Hour() const;
int Minute() const;
int Second() const;
MYTIME(const MYTIME &p);
MYTIME& operator=(const MYTIME &time);
void TotalSecond(int s);
int TotalSecond() const;
MYTIME Sub(int s) const;
MYTIME Add(int s) const;
int Sub(const MYTIME &time) const;
bool Gt(MYTIME &time);
bool Ge(MYTIME &time);
bool Lt(MYTIME &time);
bool Le(MYTIME &time);
bool Eq(MYTIME &time);
bool Ne(MYTIME &time);
static bool IsValidHour(int h);
static bool IsValidMinute(int m);
static bool IsValidSecond(int s);
static bool IsValid(int h,int m,int s);
static bool FlagOn();
static bool FlagOff();
static const int hoursPerDay;
static const int minutesPerHour;
static const int secondsPerMinute;
static const int secondsPerDay;
static const int secondsPerHour;
private:
int hour,minute,second;
static bool flag;
};
MYTIME::MYTIME(int h,int m,int s)
{
if(MYTIME::IsValid(h, m, s))
{
hour=h;minute=m;second=s;
}
else
{
hour=0;minute=0;second=0;
}
cout<<"Create ";
Output();
cout<<endl;
}
MYTIME::~MYTIME()
{
cout<<"Destroy ";
Output();
cout<<endl;
}
void MYTIME::Input()
{
char s1,s2;
int h,m,s;
cin>>h>>s1>>m>>s2>>s;
if(MYTIME::IsValid(h,m,s))
{
hour=h;minute=m;second=s;
}
}
void MYTIME::Output() const
{
cout<<setfill('0')<<setw(2)<<hour<<":"<<setw(2)<<minute<<":"<<setw(2)<<second<<setfill(' ');
if(hour<12&&flag==true)
{
cout<<" am";
}
else if(hour>=12&&flag==true)
{
cout<<" pm";
}
}
void MYTIME::Set(int h,int m,int s)
{
if(MYTIME::IsValid(h, m, s))
{
hour=h;minute=m;second=s;
}
}
void MYTIME::Hour(int h)
{
if(MYTIME::IsValidHour(h))
{
hour=h;
}
}
void MYTIME::Minute(int m)
{
if(MYTIME::IsValidMinute(m))
{
minute=m;
}
}
void MYTIME::Second(int s)
{
if(MYTIME::IsValidSecond(s))
{
second=s;
}
}
void MYTIME::Get(int &h,int &m,int &s) const
{
h=hour;m=minute;s=second;
}
int MYTIME::Hour() const
{
return hour;
}
int MYTIME::Minute() const
{
return minute;
}
int MYTIME::Second() const
{
return second;
}
MYTIME::MYTIME(const MYTIME &p)
{
hour=p.hour;minute=p.minute;second=p.second;
cout<<"Clone ";
Output();
cout<<endl;
}
MYTIME &MYTIME::operator=(const MYTIME &time)
{
if(this!=&time)
{
hour=time.hour;
minute=time.minute;
second=time.second;
}
cout<<"Assign ";
Output();
cout<<endl;
return *this;
}
void MYTIME::TotalSecond(int s)
{
int t=(86400+s%86400)%86400;
second=t%60;
t/=60;
minute=t%60;
hour=t/60;
}
int MYTIME::TotalSecond() const
{
return hour*3600+minute*60+second;
}
MYTIME MYTIME::Sub(int s) const
{
MYTIME result;
result.TotalSecond(TotalSecond()-s%86400);
return result;
}
MYTIME MYTIME::Add(int s) const
{
MYTIME result;
result.TotalSecond(TotalSecond()+s%86400);
return result;
}
int MYTIME::Sub(const MYTIME &time) const
{
return TotalSecond()-time.TotalSecond();
}
bool MYTIME::Gt(MYTIME &time)
{
return TotalSecond()>time.TotalSecond();
}
bool MYTIME::Ge(MYTIME &time)
{
return TotalSecond()>=time.TotalSecond();
}
bool MYTIME::Lt(MYTIME &time)
{
return TotalSecond()<time.TotalSecond();
}
bool MYTIME::Le(MYTIME &time)
{
return TotalSecond()<=time.TotalSecond();
}
bool MYTIME::Eq(MYTIME &time)
{
return TotalSecond()==time.TotalSecond();
}
bool MYTIME::Ne(MYTIME &time)
{
return TotalSecond()!=time.TotalSecond();
}
bool MYTIME::IsValidHour(int h)
{
return h<MYTIME::hoursPerDay&&h>=0;
}
bool MYTIME::IsValidMinute(int m)
{
return m<MYTIME::minutesPerHour&&m>=0;
}
bool MYTIME::IsValidSecond(int s)
{
return s<MYTIME::secondsPerMinute&&s>=0;
}
bool MYTIME::IsValid(int h,int m,int s)
{
return h<MYTIME::hoursPerDay&&h>=0&&m<MYTIME::minutesPerHour&&m>=0&&s<MYTIME::secondsPerMinute&&s>=0;
}
bool MYTIME::FlagOn()
{
MYTIME::flag=true;
}
bool MYTIME::FlagOff()
{
MYTIME::flag=false;
}
const int MYTIME::hoursPerDay=24;
const int MYTIME::minutesPerHour=60;
const int MYTIME::secondsPerMinute=60;
const int MYTIME::secondsPerHour=3600;
const int MYTIME::secondsPerDay=86400;
bool MYTIME::flag=false;