第八周【项目2-Time类中的运算符重载】
来源:互联网 发布:淘宝详情页怎么优化 编辑:程序博客网 时间:2024/05/21 10:31
实现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;}
测试图:
- 第八周 项目2 TIME类中的运算符重载
- 第八周 项目2 Time类中的运算符重载
- 第八周项目2-TIME类中的运算符重载
- 第八周 项目2-Time类中的运算符重载
- 第八周项目2-time类中的运算符重载
- 第八周项目2 TIME类中的运算重载符
- 第八周【项目2-Time类中的运算符重载】
- 第八周【项目2-Time类中的运算符重载】
- 第八周项目2-Time类中的运算符重载
- 第八周 项目2 Time类中的运算符重载
- 第八周项目2 Time类中的运算符重载
- 第八周项目2-Time类中的运算符重载
- 第八周 【项目2-Time类中的运算符重载】
- 第八周项目2:Time类中的运算符重载
- 第八周项目2-Time类中的运算符重载
- 第八周项目-2-time类中的运算符重载
- 第八周项目2-Time类中的运算符重载
- 第八周项目二----time类中的运算符重载
- HDU1870
- mysql 控制台简单操作
- 凡客:成于营销,败于营销
- I18N对应备忘表
- Linux命令:tar
- 第八周【项目2-Time类中的运算符重载】
- Android动画进阶—使用开源动画库nineoldandroids
- Java加密系列之(二)Base64加密
- 关联查询sql性能
- VC++MFC开发中的鼠标事件的信号传递
- Posts Tagged 【dfs】Restore IP Addresses
- mysql limit使用注意项
- 2015微软编程之美挑战赛初赛第1场
- 经典的分配问题12态