您的位置:首页 > 其它

第八周【项目2-Time类中的运算符重载】

2015-04-25 14:39 309 查看
实现Time类中的运算符重载。

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);

booloperator >= (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秒前的时间

};

提示1:并不是所有比较运算重载函数都很复杂

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片

//比较运算返回的是比较结果,是bool型的true或false

//可以直接使用已经重载了的运算实现新运算,例如果已经实现了 > ,则实现 <= 就可以很方便了……

bool CTime::operator <= (CTime &t)// 判断时间t1<=t2

{

if (*this > t) return false;

return true;

}

甚至可以如下面的代码般简练:

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片

bool CTime::operator <= (CTime&t)

{

return !(*this > t)

}

提示2:并不是所有复合赋值运算重载函数都需要很复杂

[cpp] view plaincopyprint?在CODE上查看代码片派生到我的代码片

//可以直接使用已经重载了的加减运算实现

//这种赋值, 例如 t1+=20,直接改变当前对象的值,所以在运算完成后,将*this作为返回值

CTime CTime::operator+=(CTime &c)

{

*this=*this+c;

return *this;

}

提示3:请自行编制用于测试的main()函数,有些结果不必依赖display()函数,提倡用单步执行查看结果

[参考解答]

#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::CTime(int h,int m,int s)
{
hour=h;
minute=m;
second=s;
}
void CTime::display()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
void CTime::setTime(int h,int m,int s)
{
hour=h;
minute=m;
second=s;
}
CTime CTime::operator-=(CTime &c)
{

hour-=c.hour;
minute-=c.minute;
second-=c.second;
if(second<0)
{
second+=(-second/60*60+60);
minute-=(-second/60+1+c.minute);
}
if(minute<0)
{
minute+=(-minute/60*60+60);
hour-=(-minute/60+1+c.hour);
}
if(hour<0)
{
hour+=(-hour/24+24);
}
return (*this);
}
CTime CTime::operator+=(CTime &c)
{
hour+=c.hour;
minute+=c.minute;
second+=c.second;
if(second>59)
{
second-=second/60*60;
minute+=second/60+c.minute;
}
if(minute>59)
{
minute-=minute/60*60;
hour+=c.minute/60*60+c.hour;
}
if(hour>23)
{
hour%=24;
}
return (*this);
}
CTime CTime::operator-=(int s)
{
second-=s;
if(second<0)
{
minute-=(-second/60+1);
second+=(-second/60*60+60);
}
if(minute<0)
{
hour-=(-minute/60+1);
minute+=(-minute/60*60+60);
}
if(hour<0)
hour+=(-hour/24*24+24);
return (*this);
}
CTime CTime::operator+=(int s)
{
second+=s;
if(second>59)
{
minute+=(second/60);
second-=(second/60*60);
}
if(minute>59)
{
hour+=(minute/60);
minute-=(minute/60*60);
}
if(hour>23)
hour%=24;
return (*this);
}
CTime CTime::operator-(int s)
{
second-=s;
if(second<0)
{
minute-=(-second/60+1);
second+=(-second/60*60+60);
}
if(minute<0)
{
hour-=(-minute/60+1);
minute+=(-minute/60*60+60);
}
if(hour<0)
hour+=(-minute/60*24+24);
return (*this);
}
CTime CTime::operator+(int s)
{
second+=s;
if(second>59)
{
minute+=(second/60);
second-=(second/60*60);
}
if(minute>59)
{
hour+=(minute/60);
minute-=(minute/60*60);
}
if(hour>23)
hour%=24;
return (*this);
}
CTime CTime::operator-(CTime &t)
{
hour-=t.hour;
minute-=t.minute;
second-=t.second;
if(second<0)
{
minute-=(-second/60+1);
second+=(-second/60*60+60);
}
if(minute<0)
{
hour-=(-minute/60+1);
minute+=(-minute/60*60+60);
}
if(hour<0)
hour+=(-hour/24*24+24);

return (*this);
}
CTime CTime::operator+(CTime &t)
{
hour+=t.hour;
minute+=t.minute;
second+=t.second;
if(second>59)
{
second-=second/60*60;
minute+=second/60+t.minute;
}
if(minute>59)
{
minute-=minute/60*60;
hour+=t.minute/60*60+t.hour;
}
if(hour>23)
{
hour%=24;
}
return (*this);
}
bool CTime::operator != (CTime &t)
{
if(hour!=t.hour)
return true;
else if(minute!=t.minute)
return true;
else if(second!=second)
return true;
else return false;
}
bool CTime::operator==(CTime &t)
{
if((hour==t.hour)&&(minute==t.minute)&&(minute==t.minute))
return true;
else return false;
}
bool CTime::operator <= (CTime &t)
{
bool flags=false;
if((*this)==t)
flags=true;
else if((*this)<t)flags=true;
return flags;
}
bool CTime::operator >= (CTime &t)
{
if((*this)==t)
return true;
else if((*this)>t)
return true;

}
bool CTime::operator < (CTime &t)
{
bool flags=false;
if(hour<t.hour)
flags=true;
else if(hour==t.hour)
if(minute<t.minute)
flags=true;
else if(minute==t.minute)
if(second<t.second)
flags=true;
return flags;
}
bool CTime::operator > (CTime &t)
{
bool flags=false;
if(hour>t.hour)flags=true;
else   if(hour==t.hour) if(minute>t.minute)flags=true;
else if(minute==t.minute) if(second>t.second)flags=true;
return flags;
}
int main()
{
CTime t1(23,45,36),
t2(12,56,36),
t3(11,34,3),t4(9,2,3),
t5(1,2,3),t6(1,2,3),t7,t8,t9;
if(t1>t2)cout<<"t1>t2  "<<"Y"<<endl;
else cout<<"t1>t2  "<<"N"<<endl;
if(t1<t2)cout<<"t1<t2  "<<"Y"<<endl;
else cout<<"t1<t2  "<<"N"<<endl;
if(t1>=t2)cout<<"t1>=t2  "<<"Y"<<endl;
else cout<<"t1>=t2  "<<"N"<<endl;
if(t1<=t2)cout<<"t1<=t2  "<<"Y"<<endl;
else cout<<"t1<=t2  "<<"N"<<endl;
if(t5>=t6)cout<<"t5>=t6  "<<"Y"<<endl;
else cout<<"t5>=t6  "<<"N"<<endl;
if(t3==t6)cout<<"t3=t6  "<<"Y"<<endl;
else cout<<"t5>=t6  "<<"N"<<endl;
t7=t1+t2;
t8=t3-t4;
t9=t5-t6;
cout<<"t1+t2=";
t7.display();
cout<<"t3-t4=";
t8.display();
cout<<"t5-t6=";
t9.display();
return 0;
}


测试图:

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