题目要求
已有一个日期类Date,包括三个protected成员数据
int year;
int month;
int day;
另有一个时间类Time,包括三个protected成员数据
int hour;
int minute;
int second;
现需根据输入的日程的日期时间,安排前后顺序,为此以Date类和Time类为基类,建立一个日程类Schedule,包括以下新增成员:
int ID;//日程的ID
bool operator < (const Schedule & s2);//判断当前日程时间是否早于s2
生成以上类,并编写主函数,根据输入的各项日程信息,建立日程对象,找出需要最早安排的日程,并输出该日程对象的信息。
输入格式: 测试输入包含若干日程,每个日程占一行(日程编号ID 日程日期(****//)日程时间(::**))。当读入0时输入结束,相应的结果不要输出。
输入样例:
1 2014/06/27 08:00:01
2 2014/06/28 08:00:01
0
输出样例:
The urgent schedule is No.1: 2014/6/27 8:0:1
解题思路
- 定义三个类:
Date
、Time
和Schedule
,然后定义它们的构造函数和成员函数,包括输出信息和判断时间先后顺序等。 - 主函数中,通过输入多个日程的日期和时间,创建对应的
Schedule
对象,并比较它们的时间先后顺序,找出需要最早安排的日程并输出。 - 采用了继承的方法,通过将
Date
和Time
类作为Schedule
的基类,使得Schedule
类可以使用基类的成员变量和函数。 - 使用运算符重载,自定义了小于号的操作,便于比较日程之间的时间先后顺序。
代码
#include <iostream> using namespace std; // 定义 Date 类 class Date{ protected: int year; int month; int day; public: // Date 类构造函数,用于初始化 year、month 和 day 成员变量 Date(int y,int mon,int d):year(y),month(mon),day(d){} // 输出日期信息 void showdate(){cout<<" "<<year<<"/"<<month<<"/"<<day;} }; // 定义 Time 类 class Time{ protected: int hour; int minute; int second; public: // Time 类构造函数,用于初始化 hour、minute 和 second 成员变量 Time(int h,int min,int s):hour(h),minute(min),second(s){} // 输出时间信息 void showtime(){cout<<" "<<hour<<":"<<minute<<":"<<second;} }; // 定义 Schedule 类,继承 Date 和 Time 类 class Schedule:public Date,public Time{ int ID;//日程的ID public: // 重载小于号运算符,判断当前日程时间是否早于 s2 bool operator < (const Schedule & s2); // Schedule 类构造函数,用于初始化 ID、year、month、day、hour、minute 和 second 成员变量 Schedule(int id,int y,int mon,int d,int h,int min,int s):Date(y,mon,d),Time(h,min,s),ID(id){} // 输出日程信息 void show(); }; // 重载小于号运算符 bool Schedule::operator < (const Schedule & s2){ if(year<s2.year) return 1; else if(year>s2.year) return 0; else{ if(month<s2.month) return 1; else if(month>s2.month) return 0; else{ if(day<s2.day) return 1; else if(day>s2.day) return 0; else { if(hour<s2.hour) return 1; else if(hour>s2.hour) return 0; else{ if(minute<s2.minute) return 1; else if(minute>s2.minute) return 0; else { if(second<s2.second) return 1; else return 0; } } } } } } // 输出日程信息 void Schedule::show(){ cout<<"No."<<ID<<":"; Date::showdate(); Time::showtime(); } // 主函数入口 int main() { int id,y,mon,d,h,min,s,i=0; // 初始化 s2 日程对象,用于保存最早需要安排的日程对象 Schedule s2(0,9999,9999,9999,999,999,99); while(1) { cin>>id; if(id==0) break; i++; scanf("%d/%d/%d",&y,&mon,&d); scanf("%d:%d:%d",&h,&min,&s); // 创建 Schedule 对象 s1,并初始化它的 ID、日期和时间成员变量 Schedule s1(id,y,mon,d,h,min,s); // 如果当前日程比之前最早需要安排的日程更早,就更新 s2 日程对象 if(s1<s2) s2=s1; } // 如果有输入的日程,输出最早需要安排的日程对象的信息 if(i!=0) { cout<<"The urgent schedule is "; s2.show(); } return 0; }
总结
该题考察多重继承
及重载
的相关知识,希望读者躬身实践。
我是秋说,我们下次见。