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

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

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/2082214.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-07-22
下一篇 2022-07-22

发表评论

登录后才能评论

评论列表(0条)

保存