zoukankan      html  css  js  c++  java
  • 2013第八周上机任务【项目2Time类中的运算符重载】

    /* 
    * 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; 
    }
    
    


  • 相关阅读:
    TOJ1017: Tour Guide
    tzcacm去年训练的好题的AC代码及题解
    Educational Codeforces Round 40 (Rated for Div. 2)
    AtCoder Regular Contest 092
    浙南联合训练赛20180318
    [Offer收割]编程练习赛50
    牛客练习赛13
    AtCoder Regular Contest 091
    Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)
    csa Round #73 (Div. 2 only)
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3035950.html
Copyright © 2011-2022 走看看