[C++/PTA] スケジューリング (多重継承 + オーバーロード)

[C++/PTA] スケジューリング (多重継承 + オーバーロード)

トピックの要件

すでに日付クラス Date があり、3 つの保護されたメンバー データ
int year、
int month、
int day、int が含まれています。

もう 1 つの時間クラス Time があり、これには 3 つの保護されたメンバー データ
int 時間、
int 分、
int 秒、および int が含まれます。

ここで、入力されたスケジュールの日時に従って前後のシーケンスを配置する必要があるため、Date クラスと Time クラスに基づいて、次の新しいメンバーを含むスケジュール クラス Schedule が確立されます: int ID ; //スケジュールID bool演算子
<
( const Schedule & s2);//現在のスケジュール時刻がs2より早いかどうかを判断して
上記のクラスを生成し、入力されたスケジュール情報に従ってmain関数を記述し、スケジュールオブジェクトを作成します、最も早く調整する必要があるスケジュールを検索し、スケジュール オブジェクトの情報を出力します。

入力形式:测试输入包含若干日程,每个日程占一行(日程编号ID 日程日期(****//)日程时间(::**))。当读入0时输入结束,相应的结果不要输出。

入力例:
1 2014/06/27 08:00:01
2 2014/06/28 08:00:01
0

出力例:
緊急スケジュールは No.1: 2014/6/27 8:0:1

問題解決のアイデア

  • DateTimeの 3 つのクラスを定義しSchedule、情報の出力や時間順序の判断を含むコンストラクターとメンバー関数を定義します。

  • main関数では、複数のスケジュールの日時を入力し、対応する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;
}

要約する

この質問に関連する知識が調査されている多重继承ので、読者が実践してくれることを願っています。私はです、また会いましょう。重载

おすすめ

転載: blog.csdn.net/2301_77485708/article/details/130954764