国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++實踐Time類中的運算符重載參考方法

2020-01-26 13:31:44
字體:
供稿:網(wǎng)友

【項目-Time類中的運算符重載】

實現(xiàn)Time類中的運算符重載。

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);  //二目的加減運算符的重載  //返回t規(guī)定的時、分、秒后的時間  //例t1(8,20,25),t2(11,20,50),t1+t2為19:41:15  CTime operator+(CTime &t);  CTime operator-(CTime &t);//對照+理解  CTime operator+(int s);//返回s秒后的時間  CTime operator-(int s);//返回s秒前的時間  //二目賦值運算符的重載  CTime &operator+=(CTime &c);  CTime &operator-=(CTime &c);  CTime &operator+=(int s);//返回s秒后的時間  CTime &operator-=(int s);//返回s秒前的時間  //一目運算符的重載  CTime operator++(int);//后置++,下一秒  CTime &operator++();//前置++,下一秒  CTime operator--( int);//后置--,前一秒  CTime &operator--();//前置--,前一秒};

提示1:并不是所有比較運算重載函數(shù)都很復雜

//比較運算返回的是比較結(jié)果,是bool型的true或false//可以直接使用已經(jīng)重載了的運算實現(xiàn)新運算,例如果已經(jīng)實現(xiàn)了 > ,則實現(xiàn) <= 就可以很方便了……bool CTime::operator <= (CTime &t) // 判斷時間t1<=t2{  if (*this > t) return false;  return true;}

甚至可以如下面的代碼般簡練:

bool CTime::operator <= (CTime &t){return !(*this > t)}

提示2:并不是所有復合賦值運算重載函數(shù)都需要很復雜

//可以直接使用已經(jīng)重載了的加減運算實現(xiàn)//這種賦值, 例如 t1+=20,直接改變當前對象的值,所以在運算完成后,將*this作為返回值CTime &CTime::operator+=(CTime &c){  *this=*this+c;  return *this;}

提示3:請自行編制用于測試的main()函數(shù),有些結(jié)果不必依賴display()函數(shù),提倡用單步執(zhí)行查看結(jié)果

[參考解答]

#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 istream &operator>>(istream &in,CTime &t);  friend ostream &operator<<(ostream &out,CTime t);  //比較運算符(二目)的重載  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所規(guī)定的時、分、秒后的時間,例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秒前的時間};//構(gòu)造函數(shù)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;}// 重載輸入運算符>>istream &operator>>(istream &in,CTime &t){  char ch1,ch2;  while(1)  {    cout<<"請輸入時間(hh:mm:ss) ";    cin>>t.hour>>ch1>>t.minute>>ch2>>t.second;    if (ch1==':' && ch2==':')      if (t.hour>-1 && t.hour<24 && t.minute>-1 && t.minute<60 && t.second>-1 && t.second<60) break;    cerr<<"時間格式不正確! 請重新輸入/n";  }  return cin;}// 重載輸出運算符<<ostream &operator<<(ostream &out,CTime t){  out<<t.hour<<':'<<t.minute<<':'<<t.second;  return out;}//比較運算符的重載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所規(guī)定的時、分、秒后的時間,例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++;  }  while (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--;  }  while (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;  cout<<"t1為:";  cin>>t1;  cout<<"t2為:";  cin>>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;  cout<<"t1= "<<t1<<endl;  cout<<"t2= "<<t2<<endl;  cout<<"t=t1++"<<endl;  t=t1++;  cout<<"t= "<<t<<"  t1= "<<t1<<endl;  cout<<"t=++t1"<<endl;  t=++t1;  cout<<"t= "<<t<<"  t1= "<<t1<<endl;  cout<<"t1+t2= "<<t1+t2<<endl;  cout<<"t1-t2= "<<t1-t2<<endl;  cout<<"t1+2000= "<<t1+2000<<endl;  cout<<"t1-5000= "<<t1-5000<<endl;  return 0;}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對武林網(wǎng)的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 四平市| 泰安市| 闽侯县| 高唐县| 桂东县| 松原市| 北川| 沅江市| 宽城| 高青县| 武穴市| 策勒县| 阿克| 天祝| 四川省| 宽甸| 高要市| 平和县| 庆元县| 天水市| 叙永县| 和田市| 武清区| 松阳县| 福安市| 南川市| 赞皇县| 乐亭县| 青河县| 古交市| 绩溪县| 喀喇沁旗| 无锡市| 林甸县| 杭锦后旗| 岳阳县| 武平县| 岳西县| 永安市| 新巴尔虎右旗| 鄂托克旗|