第八周【项目2-Time类中的运算符重载】

来源:互联网 发布:淘宝详情页怎么优化 编辑:程序博客网 时间:2024/05/21 10:31

实现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); 

    booloperator >= (CTime &t); 

   bool operator <= (CTime &t); 

   bool operator == (CTime &t); 

   bool operator != (CTime &t); 

   //二目的加减运算符的重载 

   //返回t规定的时、分、秒后的时间 

   //例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秒前的时间 

}; 

提示1:并不是所有比较运算重载函数都很复杂

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片

//比较运算返回的是比较结果,是bool型的true或false 

//可以直接使用已经重载了的运算实现新运算,例如果已经实现了 > ,则实现 <= 就可以很方便了…… 

bool CTime::operator <= (CTime &t)// 判断时间t1<=t2 

   if (*this > t) return false; 

   return true; 

甚至可以如下面的代码般简练:

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片

bool CTime::operator <= (CTime&t) 

   return !(*this > t) 

提示2:并不是所有复合赋值运算重载函数都需要很复杂

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片

//可以直接使用已经重载了的加减运算实现 

//这种赋值, 例如 t1+=20,直接改变当前对象的值,所以在运算完成后,将*this作为返回值 

CTime CTime::operator+=(CTime &c) 

   *this=*this+c; 

   return *this; 

提示3:请自行编制用于测试的main()函数,有些结果不必依赖display()函数,提倡用单步执行查看结果

 

[参考解答]

#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);    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规定的时、分、秒后的时间    //例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::CTime(int h,int m,int s){    hour=h;    minute=m;    second=s;}void CTime::display(){    cout<<hour<<":"<<minute<<":"<<second<<endl;}void CTime::setTime(int h,int m,int s){    hour=h;    minute=m;    second=s;}CTime CTime::operator-=(CTime &c){    hour-=c.hour;    minute-=c.minute;    second-=c.second;    if(second<0)    {        second+=(-second/60*60+60);        minute-=(-second/60+1+c.minute);    }    if(minute<0)    {        minute+=(-minute/60*60+60);        hour-=(-minute/60+1+c.hour);    }    if(hour<0)    {        hour+=(-hour/24+24);    }    return (*this);}CTime CTime::operator+=(CTime &c){    hour+=c.hour;    minute+=c.minute;    second+=c.second;    if(second>59)    {        second-=second/60*60;        minute+=second/60+c.minute;    }    if(minute>59)    {        minute-=minute/60*60;        hour+=c.minute/60*60+c.hour;    }    if(hour>23)    {        hour%=24;    }    return (*this);}CTime CTime::operator-=(int s){    second-=s;    if(second<0)    {        minute-=(-second/60+1);        second+=(-second/60*60+60);    }    if(minute<0)    {        hour-=(-minute/60+1);        minute+=(-minute/60*60+60);    }    if(hour<0)        hour+=(-hour/24*24+24);    return (*this);}CTime CTime::operator+=(int s){    second+=s;    if(second>59)    {        minute+=(second/60);        second-=(second/60*60);    }    if(minute>59)    {        hour+=(minute/60);        minute-=(minute/60*60);    }    if(hour>23)        hour%=24;    return (*this);}CTime CTime::operator-(int s){    second-=s;    if(second<0)    {        minute-=(-second/60+1);        second+=(-second/60*60+60);    }    if(minute<0)    {        hour-=(-minute/60+1);        minute+=(-minute/60*60+60);    }    if(hour<0)        hour+=(-minute/60*24+24);    return (*this);}CTime CTime::operator+(int s){    second+=s;    if(second>59)    {        minute+=(second/60);        second-=(second/60*60);    }    if(minute>59)    {        hour+=(minute/60);        minute-=(minute/60*60);    }    if(hour>23)        hour%=24;    return (*this);}CTime CTime::operator-(CTime &t){    hour-=t.hour;    minute-=t.minute;    second-=t.second;    if(second<0)    {        minute-=(-second/60+1);        second+=(-second/60*60+60);    }    if(minute<0)    {        hour-=(-minute/60+1);        minute+=(-minute/60*60+60);    }    if(hour<0)        hour+=(-hour/24*24+24);    return (*this);}CTime CTime::operator+(CTime &t){    hour+=t.hour;    minute+=t.minute;    second+=t.second;    if(second>59)    {        second-=second/60*60;        minute+=second/60+t.minute;    }    if(minute>59)    {        minute-=minute/60*60;        hour+=t.minute/60*60+t.hour;    }    if(hour>23)    {        hour%=24;    }    return (*this);}bool CTime::operator != (CTime &t){    if(hour!=t.hour)        return true;    else if(minute!=t.minute)        return true;    else if(second!=second)        return true;    else return false;}bool CTime::operator==(CTime &t){    if((hour==t.hour)&&(minute==t.minute)&&(minute==t.minute))        return true;    else return false;}bool CTime::operator <= (CTime &t){    bool flags=false;    if((*this)==t)        flags=true;    else if((*this)<t)flags=true;    return flags;}bool CTime::operator >= (CTime &t){    if((*this)==t)        return true;    else if((*this)>t)        return true;}bool CTime::operator < (CTime &t){    bool flags=false;    if(hour<t.hour)        flags=true;    else if(hour==t.hour)        if(minute<t.minute)            flags=true;        else if(minute==t.minute)            if(second<t.second)                flags=true;    return flags;}bool CTime::operator > (CTime &t){    bool flags=false;    if(hour>t.hour)flags=true;    else   if(hour==t.hour) if(minute>t.minute)flags=true;        else if(minute==t.minute) if(second>t.second)flags=true;    return flags;}int main(){    CTime t1(23,45,36),          t2(12,56,36),          t3(11,34,3),t4(9,2,3),          t5(1,2,3),t6(1,2,3),t7,t8,t9;    if(t1>t2)cout<<"t1>t2  "<<"Y"<<endl;    else cout<<"t1>t2  "<<"N"<<endl;    if(t1<t2)cout<<"t1<t2  "<<"Y"<<endl;    else cout<<"t1<t2  "<<"N"<<endl;    if(t1>=t2)cout<<"t1>=t2  "<<"Y"<<endl;    else cout<<"t1>=t2  "<<"N"<<endl;    if(t1<=t2)cout<<"t1<=t2  "<<"Y"<<endl;    else cout<<"t1<=t2  "<<"N"<<endl;    if(t5>=t6)cout<<"t5>=t6  "<<"Y"<<endl;    else cout<<"t5>=t6  "<<"N"<<endl;    if(t3==t6)cout<<"t3=t6  "<<"Y"<<endl;    else cout<<"t5>=t6  "<<"N"<<endl;    t7=t1+t2;    t8=t3-t4;    t9=t5-t6;    cout<<"t1+t2=";    t7.display();    cout<<"t3-t4=";    t8.display();    cout<<"t5-t6=";    t9.display();    return 0;}

测试图:



0 0
原创粉丝点击