/** Copyright (c) 2013, 煙台大學電腦學院* All rights reserved.* 檔案名稱:text.cpp* 作者:胡穎* 完成日期:2013年4月26日* 版本號碼:v1.0** 輸入描述:無* 問題描述:利用函數實現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);void setTime(int h,int m,int s);friend ostream& operator<<(ostream&,CTime&);friend istream& operator>>(istream&,CTime&);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秒前的時間};//建構函式ostream& operator<<(ostream&output,CTime&t){ output<<t.hour<<':'<<t.minute<<':'<<t.second<<endl; return output;}istream& operator>>(istream&input,CTime&t){ cout<<"請輸入時、分、秒:"; input>>t.hour>>t.minute>>t.second; return input;}CTime::CTime(int h,int m,int s){hour=h;minute=m;second=s;}// 設定時間void CTime::setTime(int h,int m,int s){hour=h;minute=m;second=s;}//比較子的重載bool CTime::operator > (CTime &t) // 判斷時間t1>t2{if (hour>t.hour) return true;if (hour<t.hour) return false;if (minute>t.minute) return true;if (minute<t.minute) return false;if (second>t.second) return true;return false;}bool CTime::operator < (CTime &t)// 判斷時間t1<t2{if (hour<t.hour) return true;if (hour>t.hour) return false;if (minute<t.minute) return true;if (minute>t.minute) return false;if (second<t.second) return true;return false;}bool CTime::operator == (CTime &t)// 判斷時間t1==t2{if (*this<t || *this>t) return false;return true;}bool CTime::operator != (CTime &t) // 判斷時間t1!=t2{if (*this==t) return false;return true;}bool CTime::operator >= (CTime &t)// 判斷時間t1>=t2{if (*this<t) return false;return true;}bool CTime::operator <= (CTime &t) // 判斷時間t1<=t2{if (*this>t) return false;return true;}CTime CTime::operator + (CTime &t){int h,m,s;s=second+t.second;m=minute+t.minute;h=hour+t.hour;if (s>59){s-=60;m++;}if (m>59){m-=60;h++;}if (h>23) h-=24;CTime t0(h,m,s);return t0;}//返回s秒後的時間CTime CTime::operator+(int s){int ss=s%60;int mm=(s/60)%60;int hh=s/3600;CTime t0(hh,mm,ss);return *this+t0;}// 計算時間之差CTime CTime::operator - (CTime &t){int h,m,s;s=second-t.second;m=minute-t.minute;h=hour-t.hour;if (s<0){s+=60;m--;}if (m<0){m+=60;h--;}if (h<0) h+=24;CTime t0(h,m,s);return t0;}//返回s秒前的時間CTime CTime::operator-(int s){int ss=s%60;int mm=(s/60)%60;int hh=s/3600;CTime t0(hh,mm,ss);return *this-t0;}//一目運算子的重載CTime CTime::operator++(int)//後置++,下一秒{CTime t=*this;*this=*this+1;return t;}CTime CTime::operator++()//前置++,下一秒{*this=*this+1;return *this;}CTime CTime::operator--(int)//後置--,前一秒{CTime t=*this;*this=*this-1;return t;}CTime CTime::operator--()//前置--,前一秒{*this=*this-1;return *this;}//賦值運算子的重載CTime CTime::operator+=(CTime &c){*this=*this+c;return *this;}CTime CTime::operator-=(CTime &c){*this=*this-c;return *this;}CTime CTime::operator+=(int s)//返回s秒後的時間{*this=*this+s;return *this;}CTime CTime::operator-=(int s)//返回s秒前的時間{*this=*this-s;return *this;}int main(){CTime t1,t2,t;cin>>t1>>t2;cout<<endl;cout<<"t1為:"<<t1<<endl;cout<<"t2為:"<<t2<<endl;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++; cout<<"t=t1++=:"<<t; t=++t1; cout<<"t=++t1=:"<<t; t1--; cout<<"t1--=:"<<t1; --t1; cout<<"--t1=:"<<t1; t=t1+t2; cout<<"t=t1+t2=:"<<t; t=t1-t2; cout<<"t=t1-t2=:"<<t; t=t1+45000; cout<<"t=t1+45000=:"<<t; t=t1-66000; cout<<"t=t1-66000=:"<<t; t1+=t2; cout<<"t1+=t2=:"<<t1; t1-=t2; cout<<"t1-=t2=:"<<t1; t1+=4500; cout<<"t1+=4500=:"<<t1; t1-=6600; cout<<"t1-=6600=:"<<t1;}
運算結果: