第八周任务二 运算符重载 计算时间

来源:互联网 发布:有多少网络购物平台 编辑:程序博客网 时间:2024/05/30 23:02
/* (程序头部注释开始)* 程序的版权和版本声明部分* Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved.* 文件名称:                              * 作    者:   姜雅明                              * 完成日期:   2012     年   04    月    10    日* 版 本 号:   1.0      * 对任务及求解方法的描述部分* 输入描述: 时间* 问题描述: 运算符重载,时间的计算* 程序输出: 计算后的时间* 程序头部的注释结束*/#include <iostream>using namespace std;class CTime{private:unsigned short int hour;    // 时unsigned short int minute;  // 分unsigned short int second;  // 秒public:CTime(int h=0,int m=0,int s=0):hour(h), minute(m), second(s){};void setTime(int h,int m,int s);void display();//比较运算符(二目)的重载bool operator > (CTime &t);bool operator < (CTime &t);bool operator >= (CTime &t);bool operator <= (CTime &t);bool operator == (CTime &t);bool operator != (CTime &t);//二目运算符的重载CTime operator + (CTime &c);//返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15CTime operator - (CTime &c);//对照+理解CTime operator + (int s);//返回s秒后的时间CTime operator - (int s);//返回s秒前的时间//一目运算符的重载CTime operator ++ (int);//后置++,下一秒CTime operator ++ ();//前置++,下一秒CTime operator -- (int);//后置--,前一秒CTime operator -- ();//前置--,前一秒//赋值运算符的重载     CTime operator+= (CTime &c);CTime operator-= (CTime &c);CTime operator+= (int s);//返回s秒后的时间CTime operator-= (int s);//返回s秒前的时间};//下面实现所有的运算符重载代码。//为简化编程,请注意通过调用已有函数,利用好各函数之间的关系void CTime::setTime(int h,int m,int s){hour = h; minute = m; second = s;}void CTime::display(){cout << hour << ":" << minute << ":" << second << endl;}bool CTime::operator > (CTime &t){if(hour > t.hour){return true;}else if(minute > t.minute){return true;}else if(second > t.second){return true;}else{return false;}}bool CTime::operator < (CTime &t){if(hour < t.hour){return true;}else if(minute < t.minute){return true;}else if(second < t.second){return true;}else{return false;}}bool CTime::operator >= (CTime &t){if((*this) > t || (*this) == t){return true;}else{return false;}}bool CTime::operator <= (CTime &t){if((*this) < t || (*this) == t){return true;}else{return false;}}bool CTime::operator == (CTime &t){if(hour == t.hour && minute == t.minute && second == t.second){return true;}else{return false;}}bool CTime::operator != (CTime &t){if(hour != t.hour || minute != t.minute || second != t.second){return true;}else{return false;}}CTime CTime::operator + (CTime &c){CTime t(*this);t.second+=  c.second;    if (t.second >= 60)             {              t.minute+= t.second/60;                t.second%= 60;                }t.minute+=  c.minute;          if (t.minute>=60)           {              t.hour+= t.minute/60;              t.minute%= 60;          }t.hour+= c.hour;if (t.hour>23) {        t.hour%=24;}return t;}CTime CTime::operator - (CTime &c){      CTime t(*this);if (t.second < c.second)         {    t.second+= 60;t.second-= c.second;t.minute-= 1;   }else{        t.second-= c.second;}      if (t.minute < c.minute)       {      t.minute+= 60;t.minute-=  c.minute;t.hour-= 1;}    else{        t.minute-=  c.minute;}if (t.hour < c.hour) {t.hour+=24;t.hour-= c.hour;}else{        t.hour-= c.hour;}return t;}CTime CTime::operator + (int s){CTime t(*this);t.second+= s;     if(t.second >= 60)      {          t.minute = second / 60 + minute;         t.second = second % 60;          if(t.minute >= 60)          {              t.hour = hour + minute / 60;            t.minute = minute % 60; if(t.hour >= 24){t.hour%= 24;}        }      } return t;}CTime CTime::operator - (int s){    CTime t(*this);int x;x = t.hour * 3600 + t.minute * 60 + t.second;x = x - s;t.hour = x / 3600;x = x % 3600;t.minute = x / 60;t.second = x % 60;return t;}CTime CTime::operator ++ (int)//后置++,下一秒{CTime t(*this);int x;x = hour * 3600 + minute * 60 + second;x = x + 1;hour = x / 3600;x = x % 3600;minute = x / 60;second = x % 60;return t;}CTime CTime::operator ++ ()//前置++,下一秒{CTime t(*this);int x;x = hour * 3600 + minute * 60 + second;x = x + 1;hour = x / 3600;x = x % 3600;minute = x / 60;second = x % 60;return (*this);}CTime CTime::operator -- (int)//后置--,前一秒{CTime t(*this);int x;x = hour * 3600 + minute * 60 + second;x = x - 1;hour = x / 3600;x = x % 3600;minute = x / 60;second = x % 60;return t;}CTime CTime::operator -- ()//前置--,前一秒{CTime t(*this);int x;x = hour * 3600 + minute * 60 + second;x = x - 1;hour = x / 3600;x = x % 3600;minute = x / 60;second = x % 60;return (*this);}CTime CTime::operator+= (CTime &c){second+=  c.second;                 if (second >= 60)             {              minute+= second/60;                second%= 60;                }minute+=  c.minute;          if (minute>=60)           {              hour+= minute/60;              minute%= 60;          }hour+= c.hour;if (hour>23) {        hour%=24;}return (*this);}CTime CTime::operator-= (CTime &c){if (second < c.second)         {    second+= 60;second-= c.second;minute-= 1;   }else{        second-= c.second;}      if (minute < c.minute)       {      minute+= 60;minute-=  c.minute;hour-= 1;}    else{        minute-=  c.minute;}if (hour < c.hour) {hour+=24;hour-= c.hour;}else{        hour-= c.hour;}return (*this);}CTime CTime::operator+= (int s)//返回s秒后的时间{second+= s;     if(second >= 60)      {          minute = second / 60 + minute;         second = second % 60;          if(minute >= 60)          {              hour = hour + minute / 60;            minute = minute % 60; if(hour >= 24){hour%= 24;}        }      } return (*this);}CTime CTime::operator-= (int s)//返回s秒前的时间{int x;x = hour * 3600 + minute * 60 + second;x = x - s;hour = x / 3600;x = x % 3600;minute = x / 60;second = x % 60;return (*this);}void main(){CTime t1(8,20,25),t2(11,20,50),t;cout<<"t1为:";t1.display();cout<<"t2为:";t2.display();cout<<"下面比较两个时间大小:\n";if (t1>t2) cout<<"t1>t2"<<endl;if (t1<t2) cout<<"t1<t2"<<endl;if (t1==t2) cout<<"t1=t2"<<endl; if (t1!=t2) cout<<"t1≠t2"<<endl;if (t1>=t2) cout<<"t1≥t2"<<endl;if (t1<=t2) cout<<"t1≤t2"<<endl;cout<<endl;//下面自行设计对其他运算符的重载的测试t = t1 + t2;cout << "t1+t2=";t.display();    t = t1 - t2;cout << "t1-t2=";t.display();t = t1 + 20;cout << "t1增加20秒:";t.display();t = t1 - 30;cout << "t1减少30秒:";t.display();t = t1;t++;cout << "t1++=";t.display();t = t2;++t;cout << "++t2=";t.display();t = t1;t--;cout << "t1--=";t.display();t = t2;--t;cout << "--t2=";t.display();t = t1;t+=12;cout << "t1后12秒为:";t.display();t = t2;t-=20;cout << "t2前20秒为:";t.display();t = t1;t+=t2;cout << "t1+=t2为:";t.display();t = t1;t-=t2;cout << "t1-=t2为:";t.display();system("pause");}


 

减去时间比较麻烦···开始一直不成功,因为时间没有负的···只能化成秒后计算了···

到后来直接乱了·······