第九周任务二 (这是个问题)

来源:互联网 发布:漳州seo 编辑:程序博客网 时间:2024/06/02 01:08
#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):hour(h), minute(m), second(s){ };        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);      //二目运算符的重载        CTime operator+(CTime &c);//返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15        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 operator+=(CTime &c);        CTime operator-=(CTime &c);        CTime operator+=(int s);//返回s秒后的时间        CTime operator-=(int s);//返回s秒前的时间friend ostream & operator <<(ostream &,CTime &);    friend istream & operator >>(istream &,CTime &);};    //下面实现所有的运算符重载代码。    //为简化编程,请注意通过调用已有函数,利用好各函数之间的关系        void CTime::setTime(int h,int m,int s)    {        hour=h;      minute=m;      second=s;  }        void CTime::display()    {        cout<<hour<<":"<<minute<<":"<<second<<endl;    }        bool CTime::operator > (CTime &t)    {        if(hour>t.hour)            return true;        else if(minute>t.minute)                return true;            else if(second>t.second)                    return true;               else                    return false;    }        bool CTime::operator < (CTime &t)    {        if(hour<t.hour)            return true;        else if(minute<t.minute)                return true;            else if(second<t.second)                    return true;               else                    return false;    }        bool CTime::operator >= (CTime &t)    {        if(operator <(t)!=1)            return true;        else             return false;    }        bool CTime::operator <= (CTime &t)    {        if(operator >(t)!=1)            return true;        else             return false;    }        bool CTime::operator == (CTime &t)    {        if(operator <(t)!=1||operator >(t)!=1)            return true;        else            return false;    }        bool CTime::operator != (CTime &t)    {        if(operator <(t)==1||operator >(t)==1)            return true;        else            return false;    }        CTime CTime::operator+(CTime &c)    {        CTime c1;     c1.second=second+c.second;        c1.minute=minute+c.minute;        c1.hour=hour+c.hour;        while(c1.second>59)        {            c1.second=c1.second-60;            c1.minute=c1.minute+1;        }        while(c1.minute>59)        {            c1.minute=c1.minute-60;            c1.hour=c1.hour+1;        }   while(c1.hour >= 24)c1.hour = c1.hour - 24;    return c1;    }        CTime CTime::operator-(CTime &c)    {        CTime c1; int h = 0,m = 0,s;s = c.second + c.minute* 60 + c.hour *3600 - second - minute * 60 - hour * 3600;if(s < 0)s = -s;while(s > 59){s = s - 60;m ++;}while(m > 59){m = m - 60;h ++;}while(h >= 24)h = h - 24;c1.hour = h;c1.minute = m;c1.second = s;return c1;    }        CTime CTime::operator+(int s)    {        CTime c1;        c1.second = second + s; c1.hour = hour;c1.minute = minute;    while(c1.second>59)        {            c1.second = c1.second - 60;            ++c1.minute;        }        while(c1.minute>59)        {            c1.minute = c1.minute - 60;            ++c1.hour;        }    while(c1.hour >= 24)c1.hour = c1.hour;    return c1;    }        CTime CTime::operator-(int s)    {        CTime c1;   c1.second = second;c1.minute = minute;c1.hour = hour;    while(c1.second<59)        {            c1.second+=60;            --c1.minute;     }        while(c1.minute<0)        {            c1.minute+=60;            --c1.hour;        }      c1.second=second-s;      return c1;    }        CTime CTime::operator++(int)    {        CTime temp(*this);        second++;        while(second>59)        {            second-=60;            ++minute;        }        return temp;    }        CTime CTime::operator++()       {        while(++second>59)        {            second-=60;            ++minute;        }        return *this;    }        CTime CTime::operator--(int)    {        CTime temp(*this);        second--;        return temp;    }        CTime CTime::operator--()       {        --second;        return *this;    }        CTime CTime::operator+=(CTime &c)    {         CTime c1;     c1.second = second + c.second;        c1.minute = minute + c.minute;        c1.hour = hour + c.hour;        while(c1.second > 59)        {            c1.second = c1.second - 60;            c1.minute ++;        }        while(c1.minute>59)        {            c1.minute=c1.minute-60;            c1.hour ++;        }   while(c1.hour >= 24)c1.hour = c1.hour - 24;*this = c1;                                         //问题所在点    return c1; }        CTime CTime::operator-=(CTime &c)    {         CTime c1; int h = 0,m = 0,s;s = c.second + c.minute* 60 + c.hour *3600 - second - minute * 60 - hour * 3600;if(s < 0)s = -s;while(s > 59){s = s - 60;m ++;}while(m > 59){m = m - 60;h ++;}while(h >= 24)h = h - 24;c1.hour = h;c1.minute = m;c1.second = s;*this = c1;                                   
 }
CTime CTime::operator+=(int s)    {    CTime c1;        c1.second = second + s; c1.hour = hour;c1.minute = minute;    while(c1.second>59)        {            c1.second = c1.second - 60;            ++c1.minute;        }        while(c1.minute>59)        {            c1.minute = c1.minute - 60;            ++c1.hour;        }    while(c1.hour >= 24)c1.hour = c1.hour;*this = c1;    return c1;   }        CTime CTime::operator-=(int s)    {             CTime c1;   c1.second = second;c1.minute = minute;c1.hour = hour;    if(c1.second<59)        {            c1.second+=60;            --c1.minute;     }        if(c1.minute<0)        {            c1.minute+=60;            --c1.hour;        }      c1.second=second-s; *this = c1;    return c1;      }  ostream & operator <<(ostream & output,CTime & c){output<<"("<<c.hour<<":"<<c.minute<<":"<<c.second<<endl;return output;} istream & operator >>(istream &input,CTime & c) { char d; cout<<"请输入时间(hh:mm:ss)"; input>>c.hour>>d>>c.minute>>d>>c.second; return input; }void main()      {          CTime t1(8,20,25), t2(11,20,50), t;                cout << "t1为:"<<t1;                     cout << "t2为:"<<t2;                          cout << "比较两个时间大小:" << 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;                if (t1 <= t2) cout << "t1 ≤ t2" << endl;                cout<<endl;               t = t1 + t2;                cout << "t1 + t2 = "<<t;                           t = t1-t2;                cout << "t1-t2 = "<<t;                       t = t1;            t = t + 35;            cout<< "t1 + 35 = "<<t;                       t = t2;        t = t - 8;     cout<< "t2 - 8 = "<<t ;                  t = t1;            t = t ++;            cout << endl;            cout << "t1++ = "<<t;                  t = t1;            t = ++t;            cout << "++t1 = "<<t;                  t = t2;            t = t --;            cout << "t2-- = "<<t;                 t = t2;            t = --t;            cout << "--t1 = "<<t;                  t = t1;      t += t2;     cout << "t1 += t2,t1 = " << t;              t = t2;            t -= t1;            cout << "t2 -= t1,t2 = "<<t ;                   t = t1;            t += 5;            cout << "t1 += 5 = "<<t ;                   t = t1;            t -= 6;             cout << "t1 -= 6 = " <<t;                  system("pause");      }    
问题所在:这是麻烦方法实现的任务二,本应该是上周提出的问题

         请看代码:

                          

CTime CTime::operator+=(CTime &c)    {         CTime c1;     c1.second = second + c.second;        c1.minute = minute + c.minute;        c1.hour = hour + c.hour;        while(c1.second > 59)        {            c1.second = c1.second - 60;            c1.minute ++;        }        while(c1.minute>59)        {            c1.minute=c1.minute-60;            c1.hour ++;        }   while(c1.hour >= 24)c1.hour = c1.hour - 24;*this = c1;    return c1; }    
注意倒数第三行(*this = c1;),若没有这一行,则主函数中输出的时间是没经过改变的,仍然是t1的原值,有了这行代码就对了。很多函数斗神这样,想了很长时间没有明白,还望明天老师能够指点迷津。

	
				
		
原创粉丝点击