[C++/PTA] 日程安排(多重继承+重载)

简介: [C++/PTA] 日程安排(多重继承+重载)

题目要求

已有一个日期类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

解题思路

  • 定义三个类:DateTimeSchedule,然后定义它们的构造函数和成员函数,包括输出信息和判断时间先后顺序等。
  • 主函数中,通过输入多个日程的日期和时间,创建对应的Schedule对象,并比较它们的时间先后顺序,找出需要最早安排的日程并输出。
  • 采用了继承的方法,通过将DateTime类作为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;
}

总结

该题考察多重继承重载的相关知识,希望读者躬身实践。

我是秋说,我们下次见。

目录
相关文章
|
24天前
|
存储 C++
【PTA】L1-039 古风排版(C++)
【PTA】L1-039 古风排版(C++)
10 1
|
26天前
|
编译器 C++
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)
27 1
|
10天前
|
安全 程序员 C++
C++一分钟之-重载运算符
【6月更文挑战第21天】C++的运算符重载让程序员能为自定义类型定制运算符行为,增强代码表达力。但要注意清晰性、优先级和返回类型。遵循运算符原有意义,充分测试,并用注释解释非直观设计。示例展示了如何为复数类重载`+`运算符。避免重载内置类型,注意结合性,且慎用隐式转换。重载应提升可读性而非复杂化代码。
17 2
|
24天前
|
存储 人工智能 C++
【PTA】L1-064 估值一亿的AI核心代码(详C++)
【PTA】L1-064 估值一亿的AI核心代码(详C++)
16 1
|
24天前
|
存储 C++ 索引
【PTA】L1-059 敲笨钟(C++)
【PTA】L1-059 敲笨钟(C++)
12 1
|
24天前
|
存储 人工智能 C++
【PTA】L1-093 猜帽子游戏(C++)
【PTA】L1-093 猜帽子游戏(C++)
18 1
|
24天前
|
C++
【PTA】L1-046 整除光棍(C++)
【PTA】L1-046 整除光棍(C++)
11 1
|
24天前
|
存储 C++
【PTA】L1-043 阅览室(C++)
【PTA】L1-043 阅览室(C++)
13 1
|
5天前
|
C++
C++函数的默认参数、占位符、重载
C++函数的默认参数、占位符、重载
12 0
|
5天前
|
Unix 编译器 C语言
【C++航海王:追寻罗杰的编程之路】关键字、命名空间、输入输出、缺省、重载汇总
【C++航海王:追寻罗杰的编程之路】关键字、命名空间、输入输出、缺省、重载汇总
8 0