您的位置:首页 > 其它

第二学期第八周项目2--实现Time类中的运算符重载

2014-04-22 19:27 323 查看
/*
* Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 作    者:  沈远宏
* 完成日期:2013 年 04月15日
* 版 本 号:v1.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):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);
//二目的加减运算符的重载
//返回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+=(CTime &c);
CTime operator-=(CTime &c);
CTime operator+=(int s);//返回s秒后的时间
CTime operator-=(int s);//返回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;
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;
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;
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秒后的时间
{
second=(s+second)%60;
minute=((s+second)/60+minute)%60;
hour= (((s+second)/60+minute)/60+hour)%24;
return *this;
}
CTime CTime::operator-(int s)//返回s秒前的时间
{
int s1;
s1=second+minute*60+hour*3600;
s1=s1-s;
if(s1<0)
{
s1=s1%3600;
second=-s1;
minute=0;
hour=0;
}
return *this;
}
CTime CTime::operator+=(CTime &c)
{
return(*this+c);
}
CTime CTime::operator-=(CTime &c)
{
return(*this+c);
}
CTime CTime::operator+=(int s)//返回s秒后的时间
{
return (*this+s);
}
CTime CTime::operator-=(int s)//返回s秒前的时间
{
return(*this+s);
}
int main()
{
CTime t1(8,20,25),t2(11,20,50),t3;
cout<<"t1+t2=";
t3=t1+t2;
t3.display();
cout<<"t1-t2=";
t3=t1-t2;
t3.display();
}

运行结果:



心得体会:

我的加法算法很让人头晕,我也摸不清楚当时是怎么寻思的,可能只是想节省代码行,但是发现效率并不高。

没有发博文不代表这个作业没有做。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: