PTA:时间换算(重载运算符,c++)

定义一个时间类time,内有数据成员hour,minute,second,另有成员函数:构造函数用于初始化数据成员,输出函数,运算符重载+(加号),。编写主函数:创建时间对象,再输入秒数 n,通过运算符重载+(减号),计算该时间再过 n 秒后的时间值,时间的表示形式为时:分:秒,超过 24 时从 0 时重新开始计时。
  测试输入包含若干测试用例,每个测试用例占一行。当读入0 0 0 0时输入结束,相应的结果不要输出。
   
   输入输出示例:括号内为说明
   0 0 1 59 (时间为0:0:1,秒数n=59)
   11 59 40 30 (时间为11:59:40,秒数n=30)
   23 59 40 3011 (时间为23:59:40,秒数n=3011)
   0 0 0 0
   输出:
time:0:1:0(0:0:01加上59秒的新时间)

time:12:0:10(11:59:40加上30秒的新时间)

time:0:49:51(23:59:40加上3011秒的新时间)

#include
using namespace std;
class Clock{
    private:
    int hours;
    int minutes;
    int seconds;
    public:
    Clock(int a=0,int b=0,int c=0):hours(a),minutes(b),seconds(c){}; //初始化列表函数
    void get(int ,int ,int);      //获取时间
    friend Clock operator+(const Clock &a,int k);    //重载+运算符,读入Clock对象和时间变化量
    void display();     //显示时间函数
};
void Clock::display(){
    cout<<"time:"<<hours<<":"<<minutes<<":"<<seconds<<endl;
}
void Clock::get(int a,int b,int c){
    hours=a;
    minutes=b;
    seconds=c;
}
Clock operator+(const Clock &a,int k){
    Clock c1;
    c1.hours=a.hours;  
    c1.minutes=a.minutes;
    c1.seconds=a.seconds+k;
    int count;
    if(c1.seconds+k>59||c1.seconds+k<0){    //这里要注意输入的时间变化量可能是负值
        count=(a.seconds+k)/60;
        c1.seconds=(a.seconds+k)%60;       //之前没有想到,最后一个点卡了很久
        c1.minutes=a.minutes+count;
        if(c1.seconds<0){                  //这题不需要判断时间是否合法,一开始我以为是这个的问题
         c1.seconds=60+c1.seconds;
         c1.minutes--;
  } 
        if(c1.minutes>59||c1.minutes<0){
            count=(c1.minutes)/60;
            c1.minutes=(c1.minutes)%60;
            c1.hours=a.hours+count;
            if(c1.minutes<0){
             c1.minutes=60+c1.minutes;
             c1.hours--;
   }
            if(c1.hours>23||c1.hours<0){
                c1.hours=c1.hours%24;
                if(c1.hours<0){
                 c1.hours=24+c1.hours;
    }
            }
        }
    }
    return c1;
}
int main(){
  Clock c1;           //创建Clock对象读入数据直接用重载的+运算输出即可
  int a1,a2,a3,a4;
  while(1){
  cin>>a1>>a2>>a3>>a4;
  if(a1==0&&a2==0&&a3==0&&a4==0){
  break;
  }
  c1.get(a1,a2,a3);
  c1=c1+a4;
  c1.display();
  }
    return 0;
}

你可能感兴趣的:(PTA:时间换算(重载运算符,c++))