第九周实验报告1

来源:互联网 发布:屏幕着火软件下载 编辑:程序博客网 时间:2024/05/17 09:39
/* (程序头部注释开始)* 程序的版权和版本声明部分* Copyright (c) 2012, 烟台大学计算机学院学生 * All rights reserved.* 文件名称:流运算符重载运算符(Time类)* 作 者: 刘程程* 完成日期: 2012 年 4 月 16 日* 版 本 号: 1.054* 对任务及求解方法的描述部分* 输入描述: 时间* 问题描 述:按第八周任务2,定义Time类中的<<和>>运算符重载,实现时间的输入输出,改造原程序中的对运算结果显示方式,是程序读起来更自然。      * 程序输出: ......* 程序头部的注释结束*/ #include <iostream>     using namespace std;    class CTime    {    private:        unsigned short int hour;    // 时         unsigned short int minute;  // 分         unsigned short int second;// 秒     friend bool is_time(int, int, int);public:        CTime(int h=0,int m=0,int s=0);        void setTime(int h,int m,int s);              //比较运算符(二目)的重载    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秒前的时间  friend ostream & operator << (ostream&, CTime&); friend istream & operator >> (istream&, CTime&);};    //下面实现所有的运算符重载代码。     //构造函数   CTime::CTime(int h , int m , int s )  {   hour=h;   minute=m;   second=s;  } bool is_time(int h, int m, int s)    {        if(h < 0 || h > 24 || m < 0 ||m > 60 || s < 0 || s > 60)        {          return false;      }     else      {          return true;       }  }      //对<<的重载ostream &operator << (ostream &output, CTime &c){ output << c.hour << ":" << c.minute << ":" << c.second <<endl; return output;}//设置时间   void CTime::setTime(int h, int m, int s)  {   hour=h;   minute=m;   second=s;  }    //对”>>“运算符的重载istream &operator >> (istream &input, CTime &c)  {      char c1,c2;         cout << "请输入时间(格式hh:mm:ss)";          while(1)        {            input >> c.hour >> c1 >> c.minute >> c2 >> c.second;            if(c1 != ':' || c2 != ':')            {              cout << "格式不正确,请重新输入"<<endl;            }          else if(!is_time(c.hour, c.minute, c.second))            {              cout << "时间非法,请重新输入"  << endl;            }          else           {              break;            }        }      return input;  }   //比较运算符的重载     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所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15     CTime 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;      
    system("pause");    
    return 0;  
}    

感悟:通过这个程序,学会了重载<<和>>运算符的重载,继续加油!