第九周任务二 时间 输入输出运算符重载

来源:互联网 发布:编程就业培训机构 编辑:程序博客网 时间:2024/05/21 17:29
/* (程序头部注释开始)* 程序的版权和版本声明部分* Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved.* 文件名称: * 作    者:  姜雅明  * 完成日期:  2012    年   04    月   17    日* 版 本 号:  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);friend ostream & operator << (ostream &output, CTime &c);friend istream & operator >> (istream &input, CTime &c);//比较运算符(二目)的重载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;}ostream & operator << (ostream &output, CTime &c){output << c.hour << ":" << c.minute << ":" << c.second << endl;return output;}istream & operator >> (istream &input, CTime &c){char s;do{cout << "请输入时间(xx:xx:xx):";input >> c.hour >> s >> c.minute >> s >> c.second;}while(s != ':');return input;}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,t2,t;cin >> t1;cin >> t2;cout << "t1为:" << t1;cout << "t2为:" << t2;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;t = t1 - t2;cout << "t1-t2=" << t;t = t1 + 20;cout << "t1增加20秒:" << t;t = t1 - 30;cout << "t1减少30秒:" << t;t = t1;t++;cout << "t1++=" << t;t = t2;++t;cout << "++t2=" << t;t = t1;t--;cout << "t1--=" << t;t = t2;--t;cout << "--t2=" << t;t = t1;t+=12;cout << "t1后12秒为:" << t;t = t2;t-=20;cout << "t2前20秒为:" << t;t = t1;t+=t2;cout << "t1+=t2为:" << t;t = t1;t-=t2;cout << "t1-=t2为:" << t;system("pause");}



原创粉丝点击