第八周【项目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()函数,提倡用单步执行查看结果
[参考解答]
测试图:
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类的运算符重载
- 2013第八周上机任务【项目2-Time类中的运算符重载】
- 第八周【项目2-Time类中的运算符重载】
- 第八周 课后实践:项目二——Time类中的运算符重载
- 第八周上机实践项目——Time类中的运算符重载
- 第八周项目2——time类中的运算符重载
- 第八周 项目2-Time类中的运算符重载
- 第八周 【项目2-Time类中的运算符重载】
- 第八周【项目2-Time类中的运算符重载】实现Time类中的运算符重载
- 第八周项目 二 【项目2-Time类中的运算符重载】
- 第八周项目2-time类中的运算符重载
- 15第八周项目二——Time类中的运算符重载
- 第八周项目-2-time类中的运算符重载
- 第八周项目2-Time类中的运算符重载
- 第八周项目2-Time类中的运算符重载
- 第八周上机实践项目2——Time类中的运算符重载