问题描述:
定义对时间对象的自增自减,一目运算符和<<>>运算符重载,实现时间的输入输出
#include <iostream>
using namespace std;
class CTime
{
private:
int hour,minute,sec;
public:
CTime ()
{
hour=0,minute=0,sec=0;
}
CTime(int h,int m,int s):hour(h),minute(m),sec(s) {}
void settime(int h,int m,int s);
//一目运算符的重载
CTime operator++(int );
CTime operator++();
CTime operator--(int );
CTime operator--();
//二目运算符的重载
CTime operator +(CTime &);
CTime operator-(CTime &);
CTime operator+(int );
CTime operator-(int );
//赋值运算符的重载
CTime operator+=(CTime &);
CTime operator-=(CTime &);
CTime operator+=(int );
CTime operator-=(int );
//比较运算符的重载
bool operator>(CTime &);
bool operator<(CTime &);
bool operator>=(CTime &);
bool operator<=(CTime &);
bool operator==(CTime &);
bool operator!=(CTime &);
//输入输出运算符的重载
friend istream&operator>>(istream&,CTime &c);
friend ostream&operator<<(ostream&,CTime &c);
};
void CTime::settime(int h,int m,int s)
{
hour=h;
minute=m;
sec=s;
}
//输入输出运算符的重载的定义
ostream&operator<<(ostream&output,CTime &c)
{
output<<c.hour<<":"<<c.minute<<":"<<c.sec;
return output;
}
istream&operator>>(istream&input,CTime &c)
{
char ch;
while(1)
{
cout<<"请输入一个时间:"<<endl;
input>>c.hour>>ch>>c.minute>>ch>>c.sec;
if(ch==':')
if(c.hour>=0&&c.hour<24&&c.minute>=0&&c.minute<60&&c.sec>=0&&c.sec<60)
break;
cerr<<"输入格式不正确,请重新输入:"<<endl;
}
return input;
}
//一目运算符的重载的定义
CTime CTime::operator++()
{
*this=*this+1;
return *this;
}
CTime CTime::operator++(int )
{
CTime c=*this;
*this=*this+1;
return c;
}
CTime CTime::operator--()
{
*this=*this-1;
return *this;
}
CTime CTime::operator--(int )
{
CTime c=*this;
*this=*this-1;
return c;
}
//二目运算符的重载的定义
CTime CTime::operator+(CTime &c)
{
int h,m,s;
h=hour+c.hour;
m=minute+c.minute;
s=sec+c.sec;
if(s>=60)
{
s-=60;
m++;
}
if(m>=60)
{
m-=60;
h++;
}
while(h>=24)
{
h-=24;
}
CTime t(h,m,s);
return t;
}
CTime CTime::operator+(int s)
{
int ss,mm,hh;
ss=s%60;
mm=(s/60)%60;
hh=s/3600;
CTime t(hh,mm,ss);
return *this+t;
}
CTime CTime::operator-(CTime &c)
{
int h,m,s;
h=hour+c.hour;
m=minute+c.minute;
s=sec+c.sec;
if(s<0)
{
s+=60;
m--;
}
if(m<0)
{
m+=60;
h--;
}
while(h<0)
{
h+=24;
}
CTime t(h,m,s);
return t;
}
CTime CTime::operator-(int s)
{
int ss,mm,hh;
ss=s%60;
mm=(s/60)%60;
hh=s/3600;
CTime t(hh,mm,ss);
return *this-t;
}
//赋值运算符的重载的定义
CTime CTime::operator+=(CTime &c)
{
*this+=c;
return *this;
}
CTime CTime::operator-=(CTime &c)
{
*this-=c;
return *this;
}
CTime CTime:: operator+=(int c)
{
*this+=c;
return *this;
}
CTime CTime::operator-=( int c)
{
*this-=c;
return *this;
}
//比较运算符的重载的定义
bool CTime::operator>(CTime &c)
{
if(hour>c.hour)return true;
if(hour<c.hour) return false;
if(minute>c.minute)return true;
if(minute<c.minute)return false;
if(sec>c.sec)return true;
if(sec<c.sec)return false;
}
bool CTime::operator<(CTime &c)
{
if(hour<c.hour)return true;
if(hour>c.hour) return false;
if(minute<c.minute)return true;
if(minute>c.minute)return false;
if(sec<c.sec)return true;
if(sec>c.sec)return false;
}
bool CTime::operator>=(CTime &c)
{
if(*this<c)
return false;
else
return true;
}
bool CTime::operator <=(CTime &c)
{
if(*this>c)
return false;
else
return true;
}
bool CTime::operator==(CTime&c)
{
if(*this>c||*this<c)
return false;
else
return true;
}
bool CTime::operator!=(CTime &c)
{
if(*this==c)
return false;
else
return true;
}
int main()
{
CTime c1,c2,c;
cout<<"c1为 ";
cin>>c1;
cout<<"c2为 ";
cin>>c2;
cout<<"比较c1,c2这两个时间的大小:"<<endl;
if(c1>c2)cout<<"c1>c2"<<endl;
if(c1<c2)cout<<"c1<c2"<<endl;
if(c1>=c2)cout<<"c1>=c2"<<endl;
if(c1<c2)cout<<"c1<=c2"<<endl;
if(c1==c2)cout<<"c1==c2"<<endl;
if(c1!=c2)cout<<"c1!=c2"<<endl;
cout<<"c1="<<c1<<" c2="<<c2<<endl;
cout<<"c=t1++"<<endl;
c=c1++;
cout<<"c= "<<c<<" c1= "<<c1<<endl;
cout<<"c=++c1"<<endl;
c=++c1;
cout<<"c= "<<c<<" c1= "<<c1<<endl;
return 0;
}