定義一個時間類time,內有數據成員hour,minute,second,另有成員函數:構造函數用於初始化數據成員,輸出函數,運算符重載+(加號),。編寫主函數:創建時間對象,再輸入秒數 n,通過運算符重載+(減號),計算該時間再過 n 秒后的時間值,時間的表示形式為時:分:秒,超過 24 時從 0 時重新開始計時。
1 #include<iostream> 2 #include<cmath> 3 using namespace std; 4 5 class Time //定義Time類 6 { 7 private: 8 int hour,minute,second; //私有變量hour,minute,second 9 public: 10 friend Time operator + (Time &T1,Time &T2); //友元函數重載 + 11 friend Time operator - (Time &T1,Time &T2); //友元函數重載 - 12 friend istream& operator >> (istream &input,Time &T); //友元函數重載 >> 輸入流 13 friend ostream& operator << (ostream &output,Time &T); //友元函數重載 << 輸出流 14 Time(){}; //默認構造函數 15 Time(int h,int m,int s):hour(h),minute(m),second(s){}; //構造函數 16 bool getEnd(void); //檢查是否為end 17 }; 18 19 Time operator + (Time &T1,Time &T2) 20 { 21 Time T(0,0,0); //新建對象用於函數的返回值 22 if(T2.hour<=0&&T2.minute<=0&&T2.second<=0) //如果T2為負 23 { 24 Time T2_tmp(0,0,0); 25 T2_tmp.hour=abs(T2.hour),T2_tmp.minute=abs(T2.minute),T2_tmp.second=abs(T2.second); 26 T=T1-T2_tmp; 27 return T; 28 } 29 T.second=(T1.second+T2.second<60)?(T1.second+T2.second):(T.minute++,T1.second+T2.second-60); //時分秒的相加 30 T.minute=(T1.minute+T2.minute+T.minute<60)?(T.minute+T1.minute+T2.minute):(T.hour++,T.minute+T1.minute+T2.minute-60); 31 T.hour=(T1.hour+T2.hour+T.hour<24)?(T.hour+T1.hour+T2.hour):(T.hour-=24,T.hour+T1.hour+T2.hour); 32 return T; 33 } 34 35 Time operator - (Time &T1,Time &T2) 36 { 37 Time T(0,0,0); 38 T.second=(T1.second>=T2.second)?(T1.second-T2.second):(T.minute--,T1.second-T2.second+60); //時分秒的相加 39 T.minute=(T1.minute+T.minute>=T2.minute)?(T1.minute+T.minute-T2.minute):(T.hour--,T1.minute+T.minute-T2.minute+60); 40 T.hour=(T1.hour+T.hour>=T2.hour)?(T1.hour+T.hour-T2.hour):(T.hour+=24,T1.hour+T.hour-T2.hour); 41 return T; 42 } 43 44 istream& operator >> (istream &input,Time &T) //重載Time類的輸入流 45 { 46 input>>T.hour>>T.minute>>T.second; 47 return input; //返回值 輸入流類型變量 48 } 49 50 ostream& operator << (ostream &output,Time &T) //重載Time類的輸出流 51 { 52 output<<"time:"<<T.hour<<":"<<T.minute<<":"<<T.second; 53 return output; //返回值 輸出流類型變量 54 } 55 56 bool Time::getEnd(void) 57 { 58 if(!hour&&!minute&&!second) return false; 59 else return true; 60 } 61 62 int main() 63 { 64 Time T; 65 int S; 66 cin>>T>>S; //輸入Time T(調用Time類的輸入流)和int S 67 while(T.getEnd()||S) //判斷是否為末尾 68 { 69 int hh,mm,ss; 70 ss=S%60,mm=((S-ss)/60)%60,hh=((((S-ss)/60)-mm)/60)%24; //將輸入的秒轉化為Time類 71 Time T_tmp(hh,mm,ss); 72 T=T+T_tmp; 73 cout<<T<<endl; //輸出Time T(調用Time類的輸出流) 74 cin>>T>>S; 75 } 76 return 0; 77 }