Time類中的運算子過載(2)-二目運算子的過載
阿新 • • 發佈:2018-12-30
問題描述及程式碼:
/* *copyright (c) 2016,煙臺大學計算機學院 *All rights reserved. *檔名稱:hellow.cpp *作者:田甜 *完成日期:2016年5月19日 *版本號:v1.0 * *問題描述:實現Time類中的運算子過載。 *輸入描述:/// *程式輸出:/// */ #include <iostream> using namespace std; class CTime { private: unsigned short int hour,minute,second; public: CTime(int h=0,int m=0,int s=0):hour(h),minute(m),second(s){} void set_time(int h,int m,int s) { hour=h; minute=m; second=s; } void display(); CTime operator +(const CTime&t); CTime operator -(const CTime&t); CTime operator +(int t); CTime operator -(int t); }; void CTime::display() { cout<<hour<<":"<<minute<<":"<<second<<endl; } CTime CTime::operator+(const CTime &t) { int hh=hour+t.hour; int mm=minute+t.minute; int ss=second+t.second; if(ss>59) { ss-=60; mm++; } if(mm>59) { mm-=60; hh++; } if(hh>23) { hh-=24; } CTime t0; t0.set_time(hh,mm,ss); return t0; } CTime CTime::operator-(const CTime&t) { int hh=hour-t.hour; int mm=minute-t.minute; int ss=second-t.second; if(ss<0) { ss+=60; mm--; } if(mm<0) { mm+=60; hh--; } if(hh<0) { hh+=24; } CTime t0; t0.set_time(hh,mm,ss); return t0; } CTime CTime::operator+(int t) { int ss=0,mm=0,hh=0; ss+=t%60; mm+=(t/60)%60; hh+=t/3600; CTime t0(hh,mm,ss); return *this+t0; } CTime CTime::operator-(int t) { int ss=0,mm=0,hh=0; ss+=t%60; mm+=(t/60)%60; hh+=t/3600; CTime t0(hh,mm,ss); return *this-t0; } int main() { CTime t1(5,10,20),t2(12,59,59); (t1+t2).display(); (t1-t2).display(); (t1+60).display(); (t2+1).display(); return 0; }
執行結果:
心得體會:
通過這幾次的練習我發現,在執行兩時間相加或者加上若干秒時,往往避免直接改變函式私有成員的值,而是通過定義新物件t0然後呼叫其set_time函式來實現的,最後將
t0返回。