/*
* Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 作 者: 沈远宏
* 完成日期:2013 年 04月15日
* 版 本 号:v1.0
* 问题描述:实现Time类中的运算符重载
(1)定义对时间对象的自增和自减一目运算符
(2)定义Time类中的<<和>>运算符重载,实现时间的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
*/
#include <iostream>
using namespace std;
class CTime
{
private:
unsigned short int hour; // 时
unsigned short int minute; // 分
unsigned short int second; // 秒
char p,t;
public:
CTime(int h=0,int m=0,int s=0):hour(h),minute(m),second(s) {};
//输入输出流的运算符的重载
friend ostream& operator << (ostream&,CTime&);
friend istream& operator >>(istream&,CTime&);
void input();
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);
//二目的加减运算符的重载
//返回t规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15
CTime operator+(CTime &t);
CTime operator-(CTime &t);//对照+理解
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秒前的时间
};
void CTime::input()
{
cin>>hour>>p>>minute>>t>>second;
}
void CTime::display()
{
cout<<hour<<p<<minute<<t<<second<<endl;
}
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 false;
if(hour<t.hour) return true;
if(minute>t.minute) return false;
if(minute<t.minute) return true;
if(second>t.second) return false;
return true;
}
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||*this>t)return true;
return false;
}
CTime CTime::operator+(CTime &t)
{
CTime t3(*this);
int k,j,i;
k=(second+t.second)/60;
t3.second=(second+t.second)%60;
j=(minute+t.minute+k)/60;
t3.minute=(minute+t.minute+k)%60;
i=(hour+t.hour+j)/24;
t3.hour=(hour+t.hour+j)%24;
return t3;
}
CTime CTime::operator-(CTime &t)
{
CTime t3(*this);
int k,j,i;
k=hour*3600+minute*60+second;
j=t.hour*3600+t.minute*60+t.second;
i=k-j;
t3.second=(-i)%3600;
t3.minute=(-i)/60%60;
t3.hour=(-i)/3600;
return t3;
}
CTime CTime::operator+(int s)//返回s秒后的时间
{
CTime t3(*this);
t3.second=(s+second)%60;
t3.minute=((s+second)/60+minute)%60;
t3.hour= (((s+second)/60+minute)/60+hour)%24;
return t3;
}
CTime CTime::operator-(int s)//返回s秒前的时间
{
CTime t3(*this);
int s1;
s1=second+minute*60+hour*3600;
s1=s1-s;
if(s1<0)
{
s1=s1%3600;
t3.second=-s1;
if(t3.second<60)
{
t3.minute=0;
t3.hour=0;
}
else
{
t3.second=t3.second%60;
t3.minute=t3.second/60;
t3.hour=t3.minute/60;
if(t3.hour>24)
{
t3.hour=t3.hour/24;
}
}
}
return t3;
}
CTime CTime::operator+=(CTime &c)
{
CTime t3(*this);
return(t3+c);
}
CTime CTime::operator-=(CTime &c)
{
CTime t3(*this);
return(t3-c);
}
CTime CTime::operator+=(int s)//返回s秒后的时间
{
CTime t3(*this);
return(t3+s);
}
CTime CTime::operator-=(int s)//返回s秒前的时间
{
CTime t3(*this);
return(t3-s);
}
CTime CTime::operator++()
{
CTime t3(*this);
t3.second++;
if(t3.second==60)
{
t3.second-=60;
t3.minute++;
if(t3.minute==60)
{
t3. minute-=60;
t3. hour++;
{
if(t3.hour==24)
{
t3.hour-=24;
}
}
}
}
return t3;
}
CTime CTime::operator++(int)
{
CTime t1(*this),t2(t1);
t1.second++;
if( t1.second==60)
{
t1.second-=60;
t1.minute++;
if( t1.minute==60)
{
t1. minute-=60;
t1.hour++;
{
if( t1.hour==24)
{
t1. hour-=24;
}
}
}
}
return t2;
}
CTime CTime::operator--()
{
CTime t1(*this);
t1.second--;
if( t1.second==0)
{
t1.second+=60;
t1.minute--;
if( t1.minute==0)
{
t1.minute+=60;
t1.hour--;
{
if( t1.hour==0)
{
t1.hour+=24;
}
}
}
}
return t1;
}
CTime CTime::operator--(int)
{
CTime t1(*this),t2(t1);
t1.second--;
if( t1.second==0)
{
t1.second+=60;
t1.minute--;
if( t1.minute==0)
{
t1.minute+=60;
t1.hour--;
{
if( t1.hour==0)
{
t1.hour+=24;
}
}
}
}
return t2;
}
ostream& operator<<(ostream& output,CTime& c)
{
output<<c.hour<<c.t<<c.minute<<c.p<<c.second<<endl;
return output;
}
istream& operator>>(istream& input,CTime& c)
{
input>>c.hour>>c.p>>c.minute>>c.t>>c.second;
return input;
}
int main()
{
CTime t1,t3;
cout<<"请输入个时间(时:分:秒):\n";
cin>>t1;
t3=t1++;
cout<<"t1++="<<t3;
t3=++t1;
cout<<"++t1="<<t3;
t3=t1--;
cout<<"t1--="<<t3;
t3=--t1;
cout<<"--t1="<<t3;
}
//自行编制用于测试的main()函数,有些结果不必依赖display()函数,提倡用单步执行查看结果
运行结果:
心得体会:
之前有一些浮躁,现在请自己静下来,慢慢的追赶自己落下的路