时间换算

定义一个时间类time,内有数据成员hour,minute,second,另有成员函数:构造函数用于初始化数据成员,输出函数,运算符重载+(加号),。编写主函数:创建时间对象,再输入秒数 n,通过运算符重载+(减号),计算该时间再过 n 秒后的时间值,时间的表示形式为时:分:秒,超过 24 时从 0 时重新开始计时。

 

 

 1 #include<iostream>
 2 #include<cmath>
 3 using namespace std;
 4 
 5 class Time              //定义Time类
 6 {
 7 private:
 8     int hour,minute,second;     //私有变量hour,minute,second
 9 public:
10     friend Time operator + (Time &T1,Time &T2);     //友元函数重载 + 
11     friend Time operator - (Time &T1,Time &T2);     //友元函数重载 - 
12     friend istream& operator >> (istream &input,Time &T);   //友元函数重载 >> 输入流
13     friend ostream& operator << (ostream &output,Time &T);  //友元函数重载 << 输出流
14     Time(){};       //默认构造函数
15     Time(int h,int m,int s):hour(h),minute(m),second(s){};  //构造函数
16     bool getEnd(void);  //检查是否为end
17 };
18 
19 Time operator + (Time &T1,Time &T2)
20 {
21     Time T(0,0,0);      //新建对象用于函数的返回值
22     if(T2.hour<=0&&T2.minute<=0&&T2.second<=0)  //如果T2为负
23     {
24         Time T2_tmp(0,0,0);
25         T2_tmp.hour=abs(T2.hour),T2_tmp.minute=abs(T2.minute),T2_tmp.second=abs(T2.second);
26         T=T1-T2_tmp;
27         return T;
28     }
29     T.second=(T1.second+T2.second<60)?(T1.second+T2.second):(T.minute++,T1.second+T2.second-60);        //时分秒的相加
30     T.minute=(T1.minute+T2.minute+T.minute<60)?(T.minute+T1.minute+T2.minute):(T.hour++,T.minute+T1.minute+T2.minute-60);
31     T.hour=(T1.hour+T2.hour+T.hour<24)?(T.hour+T1.hour+T2.hour):(T.hour-=24,T.hour+T1.hour+T2.hour);
32     return T;
33 }
34 
35 Time operator - (Time &T1,Time &T2)
36 {
37     Time T(0,0,0);
38     T.second=(T1.second>=T2.second)?(T1.second-T2.second):(T.minute--,T1.second-T2.second+60);   //时分秒的相加
39     T.minute=(T1.minute+T.minute>=T2.minute)?(T1.minute+T.minute-T2.minute):(T.hour--,T1.minute+T.minute-T2.minute+60);
40     T.hour=(T1.hour+T.hour>=T2.hour)?(T1.hour+T.hour-T2.hour):(T.hour+=24,T1.hour+T.hour-T2.hour);
41     return T;
42 }
43 
44 istream& operator >> (istream &input,Time &T)   //重载Time类的输入流
45 {
46     input>>T.hour>>T.minute>>T.second;
47     return input;       //返回值 输入流类型变量
48 }
49 
50 ostream& operator << (ostream &output,Time &T)  //重载Time类的输出流
51 {
52     output<<"time:"<<T.hour<<":"<<T.minute<<":"<<T.second;
53     return output;      //返回值 输出流类型变量
54 }
55 
56 bool Time::getEnd(void)
57 {
58     if(!hour&&!minute&&!second) return false;
59     else return true;
60 }
61 
62 int main()
63 {
64     Time T;
65     int S;
66     cin>>T>>S;  //输入Time T(调用Time类的输入流)和int S
67     while(T.getEnd()||S)    //判断是否为末尾
68     {
69         int hh,mm,ss;
70         ss=S%60,mm=((S-ss)/60)%60,hh=((((S-ss)/60)-mm)/60)%24;  //将输入的秒转化为Time类
71         Time T_tmp(hh,mm,ss);
72         T=T+T_tmp;
73         cout<<T<<endl;      //输出Time T(调用Time类的输出流)
74         cin>>T>>S;
75     }
76     return 0;
77 }

 

posted @ 2019-04-17 12:25  菜鸟plus  阅读(1121)  评论(0编辑  收藏  举报