第九周项目2-Time类运算符重载

来源:互联网 发布:大秦铁路知乎 编辑:程序博客网 时间:2024/05/01 07:19
/**程序的版权和版本声明部分:*Copyright(c)2014,烟台大学计算机学院学生*All rights reserved.*文件名称:*作者:田成琳*完成日期:2014  年 4 月 22 日*版本号:v1.0*对任务及求解方法的描述部分:*输入描述:无*问题描述:Time类模板,+,-,+=,-=的重载*程序输出:- -*问题分析:*算法设计:*/#include<iostream.h>//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);    //二目的比较运算符重载    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 istream & operator>>(istream &input,CTime &t);friend ostream & operator<<(ostream &output,CTime &t);};//下面实现所有的运算符重载代码。CTime CTime::operator++(int){CTime t=*this;if(second++>=60){second-=60;minute++;if(minute>=60){minute-=60;hour++;}}return t;}CTime CTime::operator++(){if(second++>=60){second-=60;minute++;if(minute>=60){minute-=60;hour++;}}return *this;}CTime CTime::operator--(int){CTime t=*this;if(--second<0){second+=60;--minute;if(minute<60){minute+=60;--hour;}}return t;}CTime CTime::operator--(){if(--second<0){second+=60;--minute;if(minute<0){minute+=60;--hour;}}return *this;}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;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 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 (*this<t || *this>t) return false;return true;}bool CTime::operator != (CTime &t){if (*this==t) return false;return true;}bool CTime::operator >= (CTime &t){if (*this<t) return false;return true;}bool CTime::operator <= (CTime &t){if (*this>t) return false;return true;}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);}istream & operator>>(istream &input,CTime &t){int h,m,s;char sign;do{input>>h>>sign>>m>>sign>>s;}while(h>24||m>60||s>60||sign!=':');t.hour=h;t.minute=m;t.second=s;return input;}ostream & operator<<(ostream &output,CTime &t){output<<t.hour<<":"<<t.minute<<":"<<t.second<<endl;return output;}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
原创粉丝点击