第8周-任务2-实现Time类中的运算符重载

来源:互联网 发布:python multiply 矩阵 编辑:程序博客网 时间:2024/06/16 04:03

/* (程序头部注释开始)

* 程序的版权和版本声明部分

* Copyright (c) 2011, 烟台大学计算机学院学生 

* All rights reserved.

* 文件名称:实现Time类中的运算符重载 ,并对运算符的重载进行测试 

* 作    者:        马琳                    

* 完成日期:     2012    年 04  月    11日

* 版 本 号:       V1.0   

* 对任务及求解方法的描述部分

* 输入描述: 

* 问题描述: 

* 程序输出:

 * 程序头部的注释结束

*/

 

 


 

#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):hour(h), minute(m), second(s){};      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: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秒前的时间   };  //下面实现所有的运算符重载代码。   //为简化编程,请注意通过调用已有函数,利用好各函数之间的关系   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)  {      if(hour > t.hour)      {          return true;      }      else if(minute > t.minute)      {          return true;      }      else if(second > t.second)      {          return true;      }      else      {          return false;      }  }    bool CTime::operator < (CTime &t)  {      if(hour < t.hour)      {          return true;      }      else if(minute < t.minute)      {          return true;      }      else if(second < t.second)      {          return true;      }      else      {          return false;      }  }    bool CTime::operator >= (CTime &t)  {      if((*this) > t || (*this) == t)      {          return true;      }      else      {          return false;      }  }    bool CTime::operator <= (CTime &t)  {      if((*this) < t || (*this) == t)      {          return true;      }      else      {          return false;      }  }    bool CTime::operator == (CTime &t)  {      if(hour == t.hour && minute == t.minute && second == t.second)      {          return true;      }      else      {          return false;      }  }    bool CTime::operator != (CTime &t)  {      if(hour != t.hour || minute != t.minute || second != t.second)      {          return true;      }      else      {          return false;      }  }    CTime CTime::operator + (CTime &c)  {      CTime t(*this);        t.second+=  c.second;      if (t.second >= 60)               {                t.minute+= t.second/60;                  t.second%= 60;                  }        t.minute+=  c.minute;            if (t.minute>=60)             {                t.hour+= t.minute/60;                t.minute%= 60;            }        t.hour+= c.hour;      if (t.hour>23)       {          t.hour%=24;      }      return t;  }    CTime CTime::operator - (CTime &c)  {            CTime t(*this);        if (t.second < c.second)               {              t.second+= 60;          t.second-= c.second;          t.minute-= 1;         }      else      {          t.second-= c.second;      }                  if (t.minute < c.minute)             {                t.minute+= 60;          t.minute-=  c.minute;          t.hour-= 1;      }      else      {          t.minute-=  c.minute;      }            if (t.hour < c.hour)       {          t.hour+=24;          t.hour-= c.hour;      }      else      {          t.hour-= c.hour;      }      return t;  }  CTime CTime::operator + (int s)  {      CTime t(*this);        t.second+= s;         if(t.second >= 60)        {            t.minute = second / 60 + minute;             t.second = second % 60;              if(t.minute >= 60)            {                t.hour = hour + minute / 60;                t.minute = minute % 60;                 if(t.hour >= 24)              {                  t.hour%= 24;              }          }        }       return t;  }  CTime CTime::operator - (int s)  {      CTime t(*this);        int x;        x = t.hour * 3600 + t.minute * 60 + t.second;        x = x - s;        t.hour = x / 3600;        x = x % 3600;        t.minute = x / 60;        t.second = x % 60;        return t;  }    CTime CTime::operator ++ (int)//后置++,下一秒   {      CTime t(*this);        int x;        x = hour * 3600 + minute * 60 + second;        x = x + 1;        hour = x / 3600;        x = x % 3600;        minute = x / 60;        second = x % 60;        return t;  }    CTime CTime::operator ++ ()//前置++,下一秒   {      CTime t(*this);        int x;        x = hour * 3600 + minute * 60 + second;        x = x + 1;        hour = x / 3600;        x = x % 3600;        minute = x / 60;        second = x % 60;        return (*this);  }    CTime CTime::operator -- (int)//后置--,前一秒   {      CTime t(*this);        int x;        x = hour * 3600 + minute * 60 + second;        x = x - 1;        hour = x / 3600;        x = x % 3600;        minute = x / 60;        second = x % 60;        return t;  }    CTime CTime::operator -- ()//前置--,前一秒   {      CTime t(*this);        int x;        x = hour * 3600 + minute * 60 + second;        x = x - 1;        hour = x / 3600;        x = x % 3600;        minute = x / 60;        second = x % 60;        return (*this);  }    CTime CTime::operator+= (CTime &c)  {      second+=  c.second;                   if (second >= 60)               {                minute+= second/60;                  second%= 60;                  }        minute+=  c.minute;            if (minute>=60)             {                hour+= minute/60;                minute%= 60;            }        hour+= c.hour;      if (hour>23)       {          hour%=24;      }      return (*this);  }    CTime CTime::operator-= (CTime &c)  {                 if (second < c.second)               {              second+= 60;          second-= c.second;          minute-= 1;         }      else      {          second-= c.second;      }                  if (minute < c.minute)             {                minute+= 60;          minute-=  c.minute;          hour-= 1;      }      else      {          minute-=  c.minute;      }            if (hour < c.hour)       {          hour+=24;          hour-= c.hour;      }      else      {          hour-= c.hour;      }      return (*this);  }    CTime CTime::operator+= (int s)//返回s秒后的时间   {      second+= s;         if(second >= 60)        {            minute = second / 60 + minute;             second = second % 60;              if(minute >= 60)            {                hour = hour + minute / 60;                minute = minute % 60;                 if(hour >= 24)              {                  hour%= 24;              }          }        }       return (*this);  }    CTime CTime::operator-= (int s)//返回s秒前的时间   {      int x;        x = hour * 3600 + minute * 60 + second;        x = x - s;        hour = x / 3600;        x = x % 3600;        minute = x / 60;        second = x % 60;        return (*this);  }  void 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 + t2;      cout << "t1+t2=";      t.display();        t = t1 - t2;      cout << "t1-t2=";      t.display();        t = t1 + 20;      cout << "t1增加20秒:";      t.display();        t = t1 - 30;      cout << "t1减少30秒:";      t.display();        t = t1;      t++;      cout << "t1++=";      t.display();        t = t2;      ++t;      cout << "++t2=";      t.display();        t = t1;      t--;      cout << "t1--=";      t.display();        t = t2;      --t;      cout << "--t2=";      t.display();        t = t1;      t+=12;      cout << "t1后12秒为:";      t.display();        t = t2;      t-=20;      cout << "t2前20秒为:";      t.display();        t = t1;      t+=t2;      cout << "t1+=t2为:";      t.display();        t = t1;      t-=t2;      cout << "t1-=t2为:";      t.display();        system("pause");  }  


 

 

 

 

 

原创粉丝点击