【任务2】接第8周任务2,定义Time类中的<<和>>运算符重载,实现时间的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然
#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:15 CTime 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秒前的时间 }; //下面实现所有的运算符重载代码。 //为简化编程,请注意通过调用已有函数,利用好各函数之间的关系 istream& operator >> (istream& input, CTime& c) { char c1; input >> c.hour >> c1 >>c.minute >> c1 >> c.second; return input; } ostream& operator << (ostream& output, CTime& c) { output <<c.hour <<':'<< c.minute << ':' << c.second; return output; } void CTime::setTime(int h,int m,int s) { hour = h; minute = m; second = s; } 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为:"; cout <<t1; cout<<"t2为:"; cout<< 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="; cout<<t<<endl; t = t1 - t2; cout << "t1-t2="; cout<<t<<endl; t = t1 + 20; cout << "t1增加20秒:"; cout<<t<<endl; t = t1 - 30; cout << "t1减少30秒:"; cout<<t<<endl; t = t1; t++; cout << "t1++="; cout<<t<<endl; t = t2; ++t; cout << "++t2="; cout<<t<<endl; t = t1; t--; cout << "t1--="; cout<<t<<endl; t = t2; --t; cout << "--t2="; cout<<t<<endl; t = t1; t+=12; cout << "t1后12秒为:"; cout<<t<<endl; t = t2; t-=20; cout << "t2前20秒为:"; cout<<t<<endl; t = t1; t+=t2; cout << "t1+=t2为:"; cout<<t<<endl; t = t1; t-=t2; cout << "t1-=t2为:"; cout<<t<<endl; system("pause"); }