本题已给出日期类MyDate和时间类MyCI ock的代码。 MyDate类以年、月、日作为数据成员,功能包括:创建对象(如果初始值 不能构成合法日期,则创建的对象年、月、日均设置为-1); IsLeap() 判断闰 年; IsValid(判断本对象的日期是否合法;重载前置+和后置++令本对象加1天;重载<和=实现日期比较;重载《<实现用cout按“年/月/日”的格式输出日期。 MyClock类以1个整数(时*3600+分*60+秒)作为数据成员,功能包括:创建对象(如果初始值不能构成合法时间,则创建的对象为0,代表0时0分0秒);重 载[ ]以1-3为下标提取当前对象的时、分、秒;重载+计算本对象加n秒之后的时间;重载<和==实现时间比较;重载》>和<<实现用cin/cout输入/输出日期。 现需要在此基础上编写时间类Time(年月日时分秒),Time 类是MyDate和 MyClock的派生类,请在//start和//end之 间编写代码,实现Time类的以下功能: (1)能够以不超过6个整数(依次表示年、月、日、时、分、秒)作为初始值创建对象,如果初始值不合理,按前述MyDate类和MyClock类的方式处理 (2)能够用cout按“[年/月/日]时:分:秒”的格式显示时间 (3)能够判断两个时间是否相等 (4)能够用“<”判断两个时间是否符合早晚关系(即小于关系) (5)能够用“本对象+MyClock对象”的方式计算经过几小时几分几秒之后的时间,或者“本对象+整数n”的方式计算n(>=0)天后的时间(时分秒不变),结果为Time类型 请在//start与//end之间编写代码,使得整个程序可以正确运行。
时间: 2024-03-20 15:44:39 浏览: 74
```cpp
#include<iostream>
using namespace std;
class MyDate{
private:
int y,m,d;
public:
MyDate(int yy=-1,int mm=-1,int dd=-1):y(yy),m(mm),d(dd){}//构造函数
bool IsLeap(){if(y%400==0||(y%4==0&&y%100!=0))return true;return false;}//判断是否为闰年
bool IsValid(){//判断日期是否合法
if(y==-1||m==-1||d==-1)return false;
if(m<1||m>12||d<1)return false;
if(m==2){//二月份的特殊处理
if(d>29)return false;
if(d==29&&!IsLeap())return false;
}
else if(m==4||m==6||m==9||m==11){
if(d>30)return false;
}
else{
if(d>31)return false;
}
return true;
}
MyDate operator++(){//前置++
d++;
if(m==2){
if(d>28&&(!IsLeap())){d-=28;m++;}
else if(d>29&&(IsLeap())){d-=29;m++;}
}
else if(m==4||m==6||m==9||m==11){
if(d>30){d-=30;m++;}
}
else{
if(d>31){d-=31;m++;}
if(m>12){m-=12;y++;}
}
return *this;
}
bool operator<(const MyDate &b)const{//小于关系
if(y<b.y)return true;
if(y>b.y)return false;
if(m<b.m)return true;
if(m>b.m)return false;
if(d<b.d)return true;
return false;
}
bool operator==(const MyDate &b)const{//等于关系
if(y==b.y&&m==b.m&&d==b.d)return true;
return false;
}
friend ostream& operator<<(ostream& os, const MyDate& dt){//输出日期
os<<dt.y<<"/"<<dt.m<<"/"<<dt.d;
return os;
}
};
class MyClock{
private:
int t;
public:
MyClock(int tt=0):t(tt){}//构造函数
int operator[](int i)const{//提取时分秒
if(i==1)return t/3600;
else if(i==2)return t%3600/60;
else return t%60;
}
MyClock operator+(int n)const{//加n秒
MyClock ans(t+n);
return ans;
}
bool operator<(const MyClock &b)const{//小于关系
return t<b.t;
}
bool operator==(const MyClock &b)const{//等于关系
return t==b.t;
}
friend istream& operator>>(istream& is, MyClock& cl){//输入时间
int h,m,s;
is>>h>>m>>s;
cl.t=h*3600+m*60+s;
return is;
}
friend ostream& operator<<(ostream& os, const MyClock& cl){//输出时间
os<<"["<<cl[1]<<"/"<<cl[2]<<"/"<<cl[3]<<"] "<<cl[1]<<":"<<cl[2]<<":"<<cl[3];
return os;
}
};
class Time:public MyDate,public MyClock{//派生类
public:
Time(int yy=-1,int mm=-1,int dd=-1,int hh=0,int min=0,int ss=0):MyDate(yy,mm,dd),MyClock(hh*3600+min*60+ss){}//构造函数
bool IsValid(){//判断时间是否合法
if(!MyDate::IsValid())return false;
if(MyClock::operator[](1)<0||MyClock::operator[](1)>23)return false;
if(MyClock::operator[](2)<0||MyClock::operator[](2)>59)return false;
if(MyClock::operator[](3)<0||MyClock::operator[](3)>59)return false;
return true;
}
bool operator<(const Time &b)const{//小于关系
if(MyDate::operator<(b))return true;
if(b<MyDate::operator=())return false;
if(MyClock::operator<(b))return true;
return false;
}
bool operator==(const Time &b)const{//等于关系
if(MyDate::operator==(b)&&MyClock::operator==(b))return true;
return false;
}
Time operator+(const MyClock &b)const{//加MyClock对象
Time ans(*this);
ans.MyClock::operator=(ans.MyClock::operator+(b.t));
if(ans.MyClock::operator[](1)>=24){
ans.MyDate::operator++();
ans.MyClock::operator=(ans.MyClock::operator+(24*3600));
}
return ans;
}
Time operator+(int n)const{//加n天
Time ans(*this);
for(int i=1;i<=n;i++)ans.MyDate::operator++();
return ans;
}
friend istream& operator>>(istream& is, Time& t){//输入时间
int yy,mm,dd,hh,min,ss;
is>>yy>>mm>>dd>>hh>>min>>ss;
t=Time(yy,mm,dd,hh,min,ss);
return is;
}
friend ostream& operator<<(ostream& os, const Time& t){//输出时间
os<<"["<<t.MyDate::operator<<(os)<<"] "<<t.MyClock::operator<<(os);
return os;
}
};
int main(){
Time t1,t2;
cin>>t1>>t2;
if(!t1.IsValid()||!t2.IsValid()){cout<<"ERROR"<<endl;return 0;}//判断是否合法
cout<<t1<<endl<<t2<<endl;
if(t1==t2)cout<<"Equal"<<endl;//判断是否相等
else if(t1<t2)cout<<"Before"<<endl;//判断前后
else cout<<"After"<<endl;
int n;
cin>>n;
Time t3=t1+n;//加n天
cout<<t3<<endl;
Time t4=t1+t2;//加MyClock对象
cout<<t4<<endl;
return 0;
}
```
阅读全文