<pre name="code" class="cpp">/*copyright(c)2016.烟台大学计算机学院
* All rights reserved,
* 文件名称:text.Cpp
* 作者:刘涛
* 完成日期:2016年5月14日
* 版本号:vc++6.0
*问题描述:实现Time类中的运算符运算
*/
#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);
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);
//二目的加减运算符的重载
//返回t规定的时、分、秒后的时间
//例t1(8,20,25),t2(11,20,50),t1+t2为19:41:15
CTime operator+(CTime &t);
CTime operator-(CTime &t);//对照+理解
CTime operator+(int s);//返回s秒后的时间
CTime operator-(int s);//返回s秒前的时间
//二目赋值运算符的重载
CTime &operator+=(CTime &c);
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::CTime(int h,int m,int s)
{
hour=h;
minute=m;
second=s;
}
void CTime::setTime(int h,int m,int s)
{
hour=h;
minute=m;
second=s;
}
void CTime::display()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
/*------------------------------------------------------*/
//二目的比较运算符重载
bool CTime::operator > (CTime &t)
{
if(hour>t.hour)return true;
else if(hour<t.hour)return false;
if(minute>t.minute)return true;
else if(minute<t.minute)return false;
if(second>t.second)return true;
else return false;
}
bool CTime::operator < (CTime &t)
{
if(hour<t.hour)return true;
else if(hour>t.hour)return false;
if(minute<t.minute)return true;
else if(minute>t.minute)return false;
if(second<t.second)return true;
return false;
}
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 false;
return true;
}
bool CTime::operator != (CTime &t) // 判断时间t1!=t2
{
if (*this==t)
return false;
return true;
}
/*---------------------------------------------------------------------*/
//二目的加减运算符的重载
//返回t规定的时、分、秒后的时间
//例t1(8,20,25),t2(11,20,50),t1+t2为19:41:15
CTime CTime::operator+(CTime &t)
{
int h,m,s;
h=hour+t.hour;
m=minute+t.minute;
s=second+t.second;
if(s>59)
{
s=s-60;
m++;
}
if(m>59)
{
m=m-60;
h++;
}
if(h>23)
h=h-24;
CTime t0(h,m,s);
return t0;
}
CTime CTime::operator-(CTime &t)
{
int h,m,s;
h=hour-t.hour;
m=minute-t.minute;
s=second-t.second;
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 s1=s%60;
int m1=(s/60)%60;
int h1=s/3600;
CTime t0(h1,m1,s1);
return *this+t0;
}
CTime CTime::operator-(int s)
{
int s1=s%60;
int m1=(s/60)%60;
int h1=s/3600;
CTime t0(h1,m1,s1);
return *this-t0;
}
/*---------------------------------------------------------*/
//二目赋值运算符的重载
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)
{
*this=*this+s;
return *this;
}
CTime &CTime::operator-=(int s)
{
*this=*this-s;
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--(int)//后置--(先操作再减)
{
CTime t=*this;
*this=*this-1;
return t;
}
CTime &CTime::operator--()//前置--(先减再操作)
{
*this=*this-1;
return *this;
}
/*--------------------------------------------------*/
int main()
{
char ch1,ch2;
int h,m,s;
CTime t1,t2,t3,t;
cout<<"请输入时间t1"<<endl;
while(1)
{
cout<<"格式(hh:mm:ss 0<=hh<24,0<=mm<60,0<=ss<60)"<<endl;;
cin>>h>>ch1>>m>>ch2>>s;
if(h>=0&&h<24&&m>=0&&m<60&&s>=0&&s<60&&ch1==':' && ch2==':')
{
t1.setTime(h,m,s);
break;
}
else
cout<<"时间格式不正确! 请重新输入"<<endl;
}
cout<<"请输入时间t2"<<endl;
while(1)
{
cout<<"格式(hh:mm:ss 0<=hh<24,0<=mm<60,0<=ss<60)"<<endl;;
cin>>h>>ch1>>m>>ch2>>s;
if(h>=0&&h<24&&m>=0&&m<60&&s>=0&&s<60&&ch1==':' && ch2==':')
{
t2.setTime(h,m,s);
break;
}
else
cout<<"时间格式不正确! 请重新输入"<<endl;
}
cout<<"t1:";
t1.display();
cout<<"t2:";
t2.display();
cout<<"比较时间大小"<<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;
if (t1<=t2) cout<<"t1≤t2"<<endl;
cout<<endl;
cout<<"t=t1++"<<endl;
t=t1++;
cout<<"t= ";
t.display();
cout<<"t1= ";
t1.display();
cout<<endl;
cout<<"t=++t1"<<endl;
t=++t1;
cout<<"t= ";
t.display();
cout<<"t1= ";
t1.display();
cout<<endl;
t3=t1+t2;
cout<<"t1+t2= ";
t3.display();
t3=t1-t2;
cout<<"t1-t2= ";
t3.display();
cout<<endl;
t3=t1+600;
cout<<"t1+600= ";
t3.display();
t3=t1-800;
cout<<"t1-800= ";
t3.display();
return 0;
}
运算结果:
<img src="http://img.blog.csdn.net/20160514124405663?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
学习心得:这个题 说实话是无力回天啊,自己做根本就是一团糟,不得已边看老师的边做,特别是引用和前置后置那一块,声明的时候&的位置都闹不清楚。还有就是第一遍把大概做出来的时候错误太多,该错的不该错的都错了,只能一个一个去改。本来还有一个问题是前导0的问题,实在是有心无力的,原谅我老师。还有一个问题是自己老师脑子里不清楚,编码过长所以前面怎么写的后边用通常 不是用的一种方法。