第9周项目2-Time类中的运算符重载(续)

来源:互联网 发布:剑三小令狐伤捏脸数据 编辑:程序博客网 时间:2024/06/01 07:21
/* *All rights reserved. *文件名称:main.cpp *作        者:姜 甜 甜 *完成日期:2015年5月8日 *版  本  号:v1.0 * *问题描述:实现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);    friend istream &operator >>(istream &in,CTime <span style="color:#ff0000;">&c);  //注意引用</span>    friend ostream &operator <<(ostream & out,CTime<span style="color:#ff0000;"> c);</span>    //一目运算符的重载    CTime operator++(int);//后置++,下一秒    CTime operator++();//前置++,下一秒,前置与后置返回值不一样    CTime operator--( int);//后置--,前一秒    CTime operator--();//前置--,前一秒    //二目的比较运算符重载    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 &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秒前的时间};istream &operator >>(istream &in,CTime &t){    char ch1,ch2;    while(1)    {        cout<<"intput time(hh:mm:ss) ";        in>>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<<"时间格式不正确! 请重新输入\n";    }    return in;}ostream &operator <<(ostream & out,CTime c){    if(c.second>59)    {        c.minute+=c.second/60;        c.second=c.second%60;    }    if(c.minute>59)    {        c.hour+=c.minute/60;        c.minute%=60;    }    if(c.hour>24)        c.hour=c.hour/24;    out<<c.hour<<":"<<c.minute<<":"<<c.second;    return out;}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;}CTime CTime::operator++(){    second++;    return *this;}CTime CTime::operator++(int){    CTime c=*this;    *this=*this+1;    return c;}CTime CTime::operator --(){    second--;    return *this;}CTime CTime::operator --(int){    CTime t=*this;    *this=*this-1;    return t;}bool CTime::operator>(CTime &t){    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){    if(hour<t.hour)        return 1;    else if(hour==t.hour&&minute<t.minute)        return 1;    else if(hour==t.hour&&minute==t.minute&&second<t.second)        return 1;    else return 0;}bool CTime::operator >= (CTime &t){    return !(*this<t);}bool CTime::operator <= (CTime &t){    return !(*this>t);}bool CTime::operator==(CTime &t){    if(hour==t.hour&&minute==t.minute&&second==t.second)        return 1;    else return 0;}bool CTime::operator != (CTime &t){    return !(*this==t);}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;}CTime CTime::operator-(CTime &t)  <span style="color:#cc0000;">//注意减法的输出</span>{    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--;    }    if (h<0) h+=24;    CTime t0(h,m,s);    return t0;}CTime CTime::operator+(int s)//返回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 s)//返回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 &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;    return 0;}

 重载流输入时,注意引用,不然写不上;流输出不必。



0 0
原创粉丝点击