2013第八周上机任务【项目2-Time类中的运算符重载】

/* 

* Copyright (c) 2013, 烟台大学计算机学院                     

* All rights reserved.                     

* 文件名称:test.cpp                     

* 作者:樊露露                    

* 完成日期:2013 年 4 月 22 日                     

* 版本号:v1.0                   

*                     

* 输入描述:无                     

* 问题描述:                  

* 程序输出:

* 问题分析:                    

* 算法设计:略                     

*/         

#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);

 CTime operator-=(int s);

};





//下面实现所有的运算符重载代码。



void CTime::display()

{

    cout<<hour<<":"<<minute<<":"<<second<<endl;

}



bool CTime::operator>(CTime &t)

{

   if(hour==t.hour)

   {

       if(minute==t.minute)

       {

           if(second>t.second)

            return true;

           else

            return false;

       }

       if(minute>t.minute)

        return true;

       else

        return false;

   }

   if(hour>t.hour)

    return true;

   else

    return false;

}



bool CTime::operator<(CTime &t)

{

   if(hour==t.hour)

   {

       if(minute==t.minute)

       {

           if(second<t.second)

            return true;

           else

            return false;

       }

       if(minute<t.minute)

        return true;

       else

        return false;

   }

   if(hour<t.hour)

    return true;

   else

    return false;

}

bool CTime::operator>=(CTime &t)

{

   if(hour==t.hour)

   {

       if(minute==t.minute)

       {

           if(second>=t.second)

            return true;

           else

            return false;

       }

       if(minute>t.minute)

        return true;

       else

        return false;

   }

   if(hour>t.hour)

    return true;

   else

    return false;

}



bool CTime::operator<=(CTime &t)

{

   if(hour==t.hour)

   {

       if(minute==t.minute)

       {

           if(second<=t.second)

            return true;

           else

            return false;

       }

       if(minute<t.minute)

        return true;

       else

        return false;

   }

   if(hour<t.hour)

    return true;

   else

    return false;

}

bool CTime::operator==(CTime &t)

{

    if(hour==t.hour&&minute==t.minute&&second==t.second)

        return true;

    else

        return false;

}

bool CTime::operator!=(CTime &t)

{

    if(hour==t.hour&&minute==t.minute&&second==t.second)

        return false;

    else

        return true;

}



CTime CTime::operator+(CTime &c)

{

    CTime t;

    t.hour=hour+c.hour;

    t.minute=minute+c.minute;

    t.second=second+c.second;

    if(t.second>=60)

    {

        t.second=t.second-60;

        t.minute=t.minute+1;

    }

    if(t.minute>=60)

    {

        t.minute=t.minute-60;

        t.hour=t.hour+1;

    }

    if(t.hour>=24)

    {

        t.hour=t.hour-24;

    }

    return t;

}



CTime CTime::operator-(CTime &c)

{

	int h,m,s;  

    s=second-c.second;  

    m=minute-c.minute;  

    h=hour-c.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)

{

	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)

{

	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)//后置++,下一秒   

{      

	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;  

}  





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(8,20,25),t2(11,20,50),t;

 cout<<"t1为:";

 t1.display();

 cout<<"t2为:";

 t2.display();

 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<<"t1+t2=";

    t.display();

	t=t1-t2;

    cout<<"t1-t2=";

    t.display();

	t=t1++;  

	cout<<"t1++=";

    t.display();

    t=++t1; 

	cout<<"++t1=";

    t.display();

    t1--;  

	cout<<"t1--=";

    t1.display();

    --t1;   

	cout<<"--t1=";

    t1.display();

    t=t1+2000;

	cout<<"t1+2000=";

    t.display();

    t=t1-5000;

	cout<<"t1-2000=";

    t.display();

    t1+=t2;

	cout<<"t1+=t2=";

    t1.display();

    t1-=t2;  

	cout<<"t1-=t2=";

    t1.display();

    t1+=2000;  

    t1-=5000;  

    return 0; 

}




2013第八周上机任务【项目2-Time类中的运算符重载】

你可能感兴趣的:(time)