问题描述及代码:
/*
*copyright (c) 2016,烟台大学计算机学院
*All rights reserved.
*文件名称:hellow.cpp
*作者:田甜
*完成日期:2016年5月19日
*版本号:v1.0
*
*问题描述:实现Time类中的运算符重载。
*输入描述:///
*程序输出:///
*/
#include <iostream>
using namespace std;
class CTime
{
private:
unsigned short int hour,minute,second;
public:
CTime(int h=0,int m=0,int s=0):hour(h),minute(m),second(s){}
void set_time(int h,int m,int s)
{
hour=h;
minute=m;
second=s;
}
void display();
CTime operator +(const CTime&t);
CTime operator -(const CTime&t);
CTime operator +(int t);
CTime operator -(int t);
};
void CTime::display()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
CTime CTime::operator+(const CTime &t)
{
int hh=hour+t.hour;
int mm=minute+t.minute;
int ss=second+t.second;
if(ss>59)
{
ss-=60;
mm++;
}
if(mm>59)
{
mm-=60;
hh++;
}
if(hh>23)
{
hh-=24;
}
CTime t0;
t0.set_time(hh,mm,ss);
return t0;
}
CTime CTime::operator-(const CTime&t)
{
int hh=hour-t.hour;
int mm=minute-t.minute;
int ss=second-t.second;
if(ss<0)
{
ss+=60;
mm--;
}
if(mm<0)
{
mm+=60;
hh--;
}
if(hh<0)
{
hh+=24;
}
CTime t0;
t0.set_time(hh,mm,ss);
return t0;
}
CTime CTime::operator+(int t)
{
int ss=0,mm=0,hh=0;
ss+=t%60;
mm+=(t/60)%60;
hh+=t/3600;
CTime t0(hh,mm,ss);
return *this+t0;
}
CTime CTime::operator-(int t)
{
int ss=0,mm=0,hh=0;
ss+=t%60;
mm+=(t/60)%60;
hh+=t/3600;
CTime t0(hh,mm,ss);
return *this-t0;
}
int main()
{
CTime t1(5,10,20),t2(12,59,59);
(t1+t2).display();
(t1-t2).display();
(t1+60).display();
(t2+1).display();
return 0;
}
运行结果:
心得体会:
通过这几次的练习我发现,在执行两时间相加或者加上若干秒时,往往避免直接改变函数私有成员的值,而是通过定义新对象t0然后调用其set_time函数来实现的,最后将
t0返回。