第九周 项目二 Time类中的运算符重载(续)

来源:互联网 发布:php网站流量统计代码 编辑:程序博客网 时间:2024/05/16 23:35

问题及代码:

/**Copyright (c)2014,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:Project.cpp*作    者:chenqin.*完成日期:2015年5月18日*版 本 号:v1.0**问题描述:在Time类中的运算符重载基础上,定义对时间对象的自增和自减一目运算符,定义Time类中的<<和>>运算符重载,实现时间的输入输出,*程序输入:正确的时间*程序输出:略*/#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();    friend istream &operator >>(istream &input,CTime &t);    friend ostream &operator <<(ostream &output,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);    //二目的加减运算符的重载    //返回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 operator++(int);//后置++,下一秒    CTime operator++();//前置++,下一秒    CTime operator--(int);//后置--,前一秒    CTime operator--();//前置--,前一秒};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;}void CTime::display(){    cout <<hour<<":"<<minute<<":"<<second<<endl;}istream &operator>>(istream &input,CTime &t){    char ch1,ch2;    while(1)    {        cout<<"请输入正确格式的时间:";        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<<"时间格式错误,请重新输入:";     }        return cin;}ostream &operator<<(ostream &output,CTime &t){    output<<t.hour<<":"<<t.minute<<":"<<t.second;    return output;}bool CTime::operator > (CTime &t){    if(hour>t.hour)        return true;    else        return false;    if(minute>t.minute)        return true;    else        return false;    if(second>t.second)        return true;    else        return false;}bool CTime::operator < (CTime &t){    if(hour<t.hour)        return true;    else        return false;    if(minute<t.minute)        return true;    else        return false;    if(second<t.second)        return true;    else        return false;}bool CTime::operator >= (CTime &t){    if(*this<t)        return false;    else        return true;}bool CTime::operator <= (CTime &t){    if(*this>t)        return false;    else        return true;}bool CTime::operator == (CTime &t){    if(*this>t||*this<t)        return false;    else        return true;}bool CTime::operator != (CTime &t){    if(*this==t)        return false;    else        return true;}CTime CTime::operator+(CTime &t){    CTime c;    c.hour=hour+t.hour;    c.minute=minute+t.minute;    c.second=second+t.second;    if(c.second>59)    {        c.second-=60;        c.minute+=c.minute;    }    if(c.minute>59)    {        c.minute-=60;        c.hour+=c.hour;    }    if(c.hour>23)    {        c.hour-=24;    }    return c;}CTime CTime::operator+(int s){    second+=s;    if(second>59)    {        second-=60;        minute+=minute;    }    if(minute>59)    {        minute-=60;        hour+=hour;    }    if(hour>23)    {        hour-=24;    }    return CTime(hour,minute,second+s);}CTime  CTime::operator-(CTime &t){    CTime c;    c.hour=hour-t.hour;    c.minute=minute-t.minute;    c.second=second-t.second;    if(c.second<0)    {        c.second+=60;        c.minute-=c.minute;    }    if(minute<0)    {        c.minute+=60;        c.hour-=c.hour;    }    if(hour<0)        c.hour=c.hour+24;    return CTime(c.hour,c.minute,c.second);}CTime CTime::operator-(int s){    second-=s;    if(second<0)    {        second+=60;        minute-=minute;    }    if(minute<0)    {        minute+=60;        hour-=hour;    }    if(hour<0)    {        hour+=24;    }    return CTime(hour,minute,second);}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){    *this=*this+s;    return *this;}CTime CTime::operator-=(int s){    *this=*this-s;    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--(int){    CTime t=*this;    *this=*this-1;    return t;}CTime CTime::operator--(){    *this=*this-1;    return *this;}int main(){    CTime t1,t2,t;    cout <<"t1为";    cin>>t1;    cout <<"t2为";    cin>>t2;    cout <<"二目的比较运算符重载"<<endl;    if(t1>t2)        cout <<"t1>t2"<<endl;    if(t1<t2)        cout <<"t1<t2"<<endl;    if(t1>=t2)        cout <<"t1>=2"<<endl;    if(t1<=t2)        cout<<"t1<=t2"<<endl;    if(t1==t2)        cout<<"t1==t2"<<endl;    if(t1!=t2)        cout<<"t1!=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 <<"二目加减运算符重载"<<endl;    t=t1+t2;    t=t1-t2;    t=t1+100;    t=t1-100;    cout <<"二目赋值运算符的重载"<<endl;    t+=t2;    t-=t2;    t+=100;    t-=100;    return 0;}

运行结果:

 

0 0