/* * Copyright (c) 2013, 煙台大學電腦學院 * All rights reserved. * 檔案名稱:text.cpp * 作者:胡穎 * 完成日期:2013年4月24日 * 版本號碼: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);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秒前的時間};//建構函式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;}//顯示時間void CTime::display(){cout<<hour<<':'<<minute<<':'<<second<<endl;}//比較子的重載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;}//二目運算子的重載// 計算時間之和, 返回c所規定的時、分、秒後的時間,例t1(8,20,25),t2(11,20,50),t1+t2為:41:15CTime 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(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++; cout<<"t為:";t.display(); t=++t1; cout<<"t為:";t.display(); t1--; cout<<"t1為:";t1.display(); --t1; cout<<"t1為:";t1.display(); t=t1+t2; cout<<"t為:";t.display(); t=t1-t2; cout<<"t為:";t.display(); t=t1+45000; cout<<"t為:";t.display(); t=t1-66000; cout<<"t為:";t.display(); t1+=t2; cout<<"t1為:";t1.display(); t1-=t2; cout<<"t1為:";t1.display(); t1+=4500; cout<<"t1為:";t1.display(); t1-=6600; cout<<"t1為:";t1.display();}
運算結果: