第九周——时间类和输入输出运算符的重载

来源:互联网 发布:java 读取内存 编辑:程序博客网 时间:2024/05/02 15:29
#include<iostream>using namespace std;class CTime{private:    int hour;    // 时    int minute;  // 分    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 operator++(int);//后置++,下一秒CTime operator++();//前置++,下一秒,前置与后置返回值不一样CTime operator--( int);//后置--,前一秒CTime operator--();//前置--,前一秒friend ostream& operator<< (ostream& output, CTime& c);    friend istream& operator>> (istream& input,CTime& c);};//下面实现所有的运算符重载代码。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;}bool CTime::operator > (CTime &t){    if(hour>t.hour)return true;elsereturn false;if(minute>t.minute)return true;elsereturn false;if(second>t.second)return true;elsereturn false;}bool CTime::operator < (CTime &t){    if(hour<t.hour)return true;elsereturn false;if(minute<t.minute)return true;elsereturn false;if(second<t.second)return true;elsereturn false;}bool CTime::operator >= (CTime &t){if(hour>=t.hour)return true;elsereturn false;if(minute>=t.minute)return true;elsereturn false;if(second>=t.second)return true;elsereturn false;}bool CTime::operator <= (CTime &t){if(hour<=t.hour)return true;elsereturn false;if(minute<=t.minute)return true;elsereturn false;if(second<=t.second)return true;elsereturn false;}bool CTime::operator == (CTime &t){if(hour==t.hour)return true;elsereturn false;if(minute==t.minute)return true;elsereturn false;if(second==t.second)return true;elsereturn false;}bool CTime::operator != (CTime &t){if(hour!=t.hour)return true;elsereturn false;if(minute!=t.minute)return true;elsereturn false;if(second!=t.second)return true;elsereturn false;}CTime CTime::operator+(CTime &t){int s,m,h;    s=second+t.second;m=minute+t.minute;h=hour+t.hour;    while(s>=60)    {        s-=60;        m++;    }    while(m>=60)    {        m-=60;        h++;    }    while(h>=24)        h-=24;    CTime t1(h,m,s);return t1;}CTime CTime::operator-(CTime &t){int s,m,h;    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 t1(h,m,s);return t1;}CTime CTime::operator+(int s){    int sec,min,hou;sec=s%60;min=(s/60)%60;hou=s/3600;CTime t(hou,min,hou);return *this+t;}CTime CTime::operator-(int s){    int sec,min,hou;sec=s%60;min=(s/60)%60;hou=s/3600;CTime t(hou,min,hou);return *this-t;}CTime CTime::operator+=(CTime &t){second+=t.second;minute+=t.minute;hour+=t.hour;    while(second>=60)    {        second-=60;        minute++;    }    while(minute>=60)    {        minute-=60;        hour++;    }    while(hour>=24)        hour-=24;CTime t1(hour,minute,second);return t1;}CTime CTime::operator-=(CTime &t){second-=t.second;minute-=t.minute;hour-=t.hour;    while(second<0)    {        second+=60;        minute--;    }    while(minute<0)    {        minute++;        hour--;    }    while(hour<0)        hour+=24;CTime t1(hour,minute,second);return t1;}CTime CTime::operator+=(int s){second+=s;while(second>60){second-=60;minute++;while(minute>60){minute-=60;hour++;}}return CTime(hour,minute,second);}CTime CTime::operator-=(int s){second-=s;while(second<0){second+=60;minute--;while(minute<0){minute+=60;hour--;}}return CTime(hour,minute,second);}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;    return t;}CTime CTime::operator--(){    *this=*this+1;    return *this;}ostream& operator<< (ostream& output, CTime& c){    output<<"("<<c.hour<<":"<<c.minute<<":"<<c.second<<endl;    return output;}istream& operator>> (istream& input,CTime& c){    int x,y,z;    char ch;    do    {        cout<<"输入**:**:**形式"<<endl;        input>>x>>ch>>y>>ch>>z;    }    while (ch!=':'&&!(x>=24&&y>=60&&z>=60));    c.hour=x;    c.minute=y;    c.second=z;    return input;}int main(){    CTime t1(8,20,25),t2(11,20,50),t3,t;cout<<"t1为:";cout<<t1;cout<<"t2为:";cout<<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;t=t1+t2;cout<<t;t=t1-t2;cout<<t;t=t1+2000;cout<<t;t=t1-5000;cout<<t;t1+=t2;cout<<t1;t1-=t2;cout<<t1;t1+=2000;cout<<t1;t1-=5000;cout<<t1;return 0;}

0 0
原创粉丝点击