第8周实验报告2

来源:互联网 发布:青岛java培训 编辑:程序博客网 时间:2024/05/16 15:05

 

/* (程序头部注释开始)* 程序的版权和版本声明部分* Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved.* 文件名称:实现Time类中的运算符重载 ,并对运算符的重载进行测试 * 作    者:      朱亚楠                     * 完成日期:     2012    年 04  月    09 日* 版 本 号:      * 对任务及求解方法的描述部分* 输入描述: * 问题描述: * 程序输出: * 程序头部的注释结束*/<p>#include <iostream>  using namespace std;  </p><p>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: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秒前的时间  };  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;  }  </p><p>void CTime::display()  {      cout<<hour<<":"<<minute<<":"<<second<<endl;    }  //下面实现所有的运算符重载代码。  //为简化编程,请注意通过调用已有函数,利用好各函数之间的关系  //比较运算符(二目)的重载  bool CTime::operator > (CTime &t)  {      if(hour>t.hour)          return true;      else if(hour<t.hour)          return false;      else if(minute>t.minute )          return true;      else if(minute<t.minute )          return false;      else if(second>t.second )          return true;      else if(second<t.second )          return false;      return false;  }  bool CTime::operator < (CTime &t)  {      if(hour<t.hour)          return true;      else if(hour>t.hour)          return false;      else if(minute<t.minute )          return true;      else if(minute>t.minute )          return false;      else if(second<t.second )          return true;      else if(second>t.second )          return false;      return false;  }  bool CTime::operator >= (CTime &t)  {      CTime t1;      t1.hour =hour;      t1.minute =minute ;      t1.second =second ;      if (t1<t)          return false;      return true;  }  bool CTime::operator <= (CTime &t)  {      CTime t1;      t1.hour =hour;      t1.minute =minute ;      t1.second =second ;      if (t1>t)          return false;      return true;  }  bool CTime::operator == (CTime &t)  {      CTime t1;      t1.hour =hour;      t1.minute =minute ;      t1.second =second ;      if (t1>t)          return false;      if (t1<t)          return false;      return true;  }  </p><p>bool CTime::operator != (CTime &t)  {      CTime t1;      t1.hour =hour;      t1.minute =minute ;      t1.second =second ;      if(t1==t)          return false;      return true;  }  //二目运算符的重载  CTime CTime::operator+(CTime &c)//返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15  {      CTime t;      t.hour =hour+c.hour ;      t.minute =minute+c.minute ;      t.second =second +c.second ;      if (t.second >59)      //思考:if中的两条语句能否交换顺序?为什么不能?后果将是……?        {            t.minute=(t.minute +t.second/60);    //增加sec/60分钟           if (t.minute>59)                {                t.hour=(t.hour+t.minute/60);                if (t.hour>23)                    t.hour=(t.hour %24);                  t.minute=(t.minute %60);            }          t.second=(t.second %60);                //秒数应该是sec%=60        }        if (t.minute>59)            {            t.hour=(t.hour +t.minute/60);            if (t.hour>23)                t.hour=(t.hour %24);           t.minute=(t.minute %60);        }      if (t.hour>23)            t.hour=(t.hour %24);       //此程序不涉及日期,如果设计类DateTime,修改将继续下去     return t;  }  CTime CTime::operator-(CTime &c)//对照+理解  {      CTime c2;      int time;       time = (hour * 3600 + minute * 60 + second) - (c.hour * 3600 + c.minute * 60 + c.second);       c2.hour = time / 3600;       time = time % 3600;       c2.minute = time / 60;       time = time % 60;       c2.second = time;       return c2;  }  CTime CTime::operator+(int s)//返回s秒后的时间  {      CTime t;       t.hour =hour;      t.minute =minute ;      t.second =second ;      t.second =(t.second +s);      if (t.second >59)      //思考:if中的两条语句能否交换顺序?为什么不能?后果将是……?        {            t.minute+=t.second/60;    //增加sec/60分钟           if (t.minute>59)                {                t.hour+=t.minute/60;                if (t.hour>23)                    t.hour%=24;                  t.minute%=60;            }          t.second%=60;                //秒数应该是sec%=60        }        else if (t.minute>59)            {            t.hour+=t.minute/60;            if (t.hour>23)                t.hour%=24;           t.minute%=60;        }      else  if (t.hour>23)            t.hour%=24;       //此程序不涉及日期,如果设计类DateTime,修改将继续下去     return t;  }  CTime CTime::operator-(int s)//返回s秒前的时间  {   int time = hour * 3600 + minute * 60 + second;       time = time - s;       hour = time / 3600;       time = time % 3600;       minute = time / 60;       time = time % 60;       second = time;       return (*this);  }  //一目运算符的重载  CTime CTime::operator++(int)//后置++,下一秒  {      CTime temp(*this);      second++;      if(second>=60)      {           second-=60;          ++minute;      }      return temp;  }  CTime CTime::operator++()//前置++,下一秒  {      if(++second>=60)      {          second-=60;          ++minute;      }       return *this;  }  CTime CTime::operator--(int)//后置--,前一秒  {      CTime temp(*this);      second--;      if(second<0)      {           second=59;          --minute;      }      return temp;  }  CTime CTime::operator--()//前置--,前一秒  {      if(--second<0)      {          second=59;          --minute;      }      return *this;  }  //赋值运算符的重载       CTime CTime::operator+=(CTime &c)  {      CTime t1,t;      t1.hour =hour;      t1.minute =minute ;      t1.second =second ;      t=t1+c;      hour=t.hour ;      minute=t.minute ;      second=t.second ;      return t;  }  CTime CTime::operator-=(CTime &c)  {      CTime t1,t;      t1.hour =hour;      t1.minute =minute ;      t1.second =second ;      t=t1-c;      hour=t.hour ;      minute=t.minute ;      second=t.second ;      return t;   }  CTime CTime::operator+=(int s)//返回s秒后的时间  {      CTime t1,t;      t1.hour =hour;      t1.minute =minute ;      t1.second =second ;      t=t1+s;      hour=t.hour ;      minute=t.minute ;      second=t.second ;      return t;  }  CTime CTime::operator-=(int s)//返回s秒前的时间  {      CTime t1,t;      t1.hour =hour;      t1.minute =minute ;      t1.second =second ;      t=t1-s;      hour=t.hour ;      minute=t.minute ;      second=t.second ;      return t;  }  void main()  {      CTime t1(8,20,25),t2(11,20,50),t;      int n;      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;      cout<<"t1+t2的时间为:";      t=t1+t2;      t.display();      cout<<"t2-t1的时间为:";      t=t2-t1;      t.display();      cout<<endl;      cout<<"请输入您想增加的秒数:";      cin>>n;      t=t1+n;      cout<<"增加"<<n<<"秒后的时间为:";      t.display ();      t=t1-n;      cout<<"增加"<<n<<"秒前的时间为:";      t.display ();      cout<<endl;      cout<<"对t1后置++,结果为:";      t=t1++;      t.display ();      cout<<"运算结束后,t1的值为:";      t1.display ();      cout<<endl;      cout<<"对t1前置++,结果为:";      t=++t1;      t.display ();      cout<<"运算结束后,t1的值为:";      t1.display ();      cout<<endl;      cout<<"对t1后置--,结果为:";      t=t1--;      t.display ();      cout<<"运算结束后,t1的值为:";      t1.display ();      cout<<endl;      cout<<"对t1前置--,结果为:";      t=--t1;      t.display ();      cout<<"运算结束后,t1的值为:";      t1.display ();      cout<<endl;      cout<<"运算t1+=t2的结果为:";      t1+=t2;      t1.display ();      cout<<endl;      cout<<"此时t1的值为:";      t1.display ();      cout<<"此时t2的值为:";      t2.display ();      cout<<endl;      cout<<"运算t1-=t2的结果为:";      t1-=t2;      t1.display ();      cout<<"此时t1的值为:";      t1.display ();      cout<<"此时t2的值为:";      t2.display ();      cout<<endl;      cout<<"请输入您想增加的秒数:";      cin>>n;      t1+=n;      cout<<"t1增加"<<n<<"秒后的时间为:";      t1.display ();      cout<<"t2增加"<<n<<"秒前的时间为:";      t2-=n;      t2.display ();      cout<<endl;      system("PAUSE");  }    </p>


上机经验:

真是要多请教同学啊,这代码我只能说、真长…… 不过还是被我拿下了,不过还有不很明白的,多看看书,问同学吧。

原创粉丝点击