第九周实验报告(1)
2012-04-17 21:30
253 查看
#include <iostream.h> 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); //比较运算符(二目)的重载 bool operator > (CTime &t); bool operator < (CTime &t); bool operator >= (CTime &t); bool operator <= (CTime &t); bool operator == (CTime &t); bool operator != (CTime &t); //二目运算符的重载 CTime operator+(CTime &c); //返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15 CTime operator-(CTime &c);//对照+理解 CTime operator+(int s);//返回s秒后的时间 CTime operator-(int s);//返回s秒前的时间 //一目运算符的重载 CTime operator++(int);//后置++,下一秒 CTime operator++();//前置++,下一秒 CTime operator--(int);//后置--,前一秒 CTime operator--();//前置--,前一秒 //赋值运算符的重载 CTime operator+=(CTime &c); CTime operator-=(CTime &c); CTime operator+=(int s);//返回s秒后的时间 CTime operator-=(int s);//返回s秒前的时间 //重载流插入运算符“<<” friend ostream& operator << (ostream&,CTime&); //重载流提取运算符“>>” friend istream& operator >> (istream&,CTime&); }; CTime::CTime(int h,int m,int s) { hour=h; minute=m; second=s; } /*void CTime::setTime(int h,int m,int s) { hour=h; minute=m; second=s; } */ //下面实现所有的运算符重载代码。 //为简化编程,请注意通过调用已有函数,利用好各函数之间的关系 //比较运算符(二目)的重载 ostream& operator << (ostream&output,CTime&c) { if(c.hour>24) c.hour=c.hour-24; if(c.minute>60) c.minute =c.minute -60; if(c.second >60) c.second=c.second-60; output<<c.hour <<":"<<c.minute <<":"<<c.second <<endl; return output; } istream& operator >> (istream& input,CTime & c) { char c1,c2; cout<<"请输入时间(格式hh:mm:ss)"; while(1) { input>>c.hour>>c1>>c.minute>>c2>>c.second; if(c1!=':'||c2!=':') cout<<"格式输入不正确请重新输入"<<endl; else break; } return input; } 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 true; else if(hour>t.hour) return false; else if(minute<t.minute ) return true; else if(minute>t.minute ) return false; else if(second<t.second ) return true; else if(second>t.second ) return false; return false; } bool CTime::operator >= (CTime &t) { CTime t1; t1.hour =hour; t1.minute =minute ; t1.second =second ; if (t1<t) return false; return true; } bool CTime::operator <= (CTime &t) { CTime t1; t1.hour =hour; t1.minute =minute ; t1.second =second ; if (t1>t) return false; return true; } bool CTime::operator == (CTime &t) { CTime t1; t1.hour =hour; t1.minute =minute ; t1.second =second ; if (t1>t) return false; if (t1<t) return false; return true; } bool CTime::operator != (CTime &t) { CTime t1; t1.hour =hour; t1.minute =minute ; t1.second =second ; if(t1==t) return false; return true; } //二目运算符的重载 CTime CTime::operator+(CTime &c)//返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15 { CTime c2; int time; time = (hour * 3600 + minute * 60 + second) + (c.hour * 3600 + c.minute * 60 + c.second); c2.hour = time / 3600; time = time % 3600; c2.minute = time / 60; time = time % 60; c2.second = time; return c2; } CTime CTime::operator-(CTime &c)//对照+理解 { CTime c2; int time; time = (hour * 3600 + minute * 60 + second) - (c.hour * 3600 + c.minute * 60 + c.second); c2.hour = time / 3600; time = time % 3600; c2.minute = time / 60; time = time % 60; c2.second = time; return c2; } CTime CTime::operator+(int s)//返回s秒后的时间 { int time = hour * 3600 + minute * 60 + second + s; hour = time / 3600; time = time % 3600; minute = time / 60; time = time % 60; second = time; return (*this); } CTime CTime::operator-(int s)//返回s秒前的时间 { int time = hour * 3600 + minute * 60 + second; time = time - s; hour = time / 3600; time = time % 3600; minute = time / 60; time = time % 60; second = time; return (*this); } //一目运算符的重载 CTime CTime::operator++(int)//后置++,下一秒 { CTime temp(*this); second++; if(second>=60) { second-=60; ++minute; } return temp; } CTime CTime::operator++()//前置++,下一秒 { if(++second>=60) { second-=60; ++minute; } return *this; } CTime CTime::operator--(int)//后置--,前一秒 { CTime temp(*this); second--; if(second<0) { second=59; --minute; } return temp; } CTime CTime::operator--()//前置--,前一秒 { if(--second<0) { second=59; --minute; } return *this; } //赋值运算符的重载 CTime CTime::operator+=(CTime &c) { CTime t1,t; t1.hour =hour; t1.minute =minute ; t1.second =second ; t=t1+c; hour=t.hour ; minute=t.minute ; second=t.second ; return t; } CTime CTime::operator-=(CTime &c) { *this=*this-c; return *this; } CTime CTime::operator+=(int s)//返回s秒后的时间 { CTime t1,t; t1.hour =hour; t1.minute =minute ; t1.second =second ; t=t1+s; hour=t.hour ; minute=t.minute ; second=t.second ; return t; } CTime CTime::operator-=(int s)//返回s秒前的时间 { *this=*this-s; return *this; } void main() { CTime t1,t2,t; int n; cin>>t1; cin>>t2; cout<<"t1为:"; cout<<t1; cout<<"t2为:"; cout<<t2; cout<<"下面比较两个时间大小:\n"; if (t1>t2) cout<<"t1>t2"<<endl; if (t1<t2) cout<<"t1<t2"<<endl; if (t1==t2) cout<<"t1=t2"<<endl; if (t1!=t2) cout<<"t1≠t2"<<endl; if (t1>=t2) cout<<"t1≥t2"<<endl; if (t1<=t2) cout<<"t1≤t2"<<endl; cout<<endl; cout<<"t1+t2的时间为:"; t=t1+t2; cout<<t; cout<<"t2-t1的时间为:"; t=t2-t1; cout<<t; cout<<endl; cout<<"请输入您想增加的秒数:"; cin>>n; t=t1+n; cout<<"增加"<<n<<"秒后的时间为:"; cout<<t; t=t1-n; cout<<"增加"<<n<<"秒前的时间为:"; cout<<t; cout<<endl; cout<<"对t1后置++,结果为:"; t=t1++; cout<<t; cout<<"运算结束后,t1的值为:"; cout<<t1; cout<<endl; cout<<"对t1前置++,结果为:"; t=++t1; cout<<t; cout<<"运算结束后,t1的值为:"; cout<<t1; cout<<endl; cout<<"对t1后置--,结果为:"; t=t1--; cout<<t; cout<<"运算结束后,t1的值为:"; cout<<t1; cout<<endl; cout<<"对t1前置--,结果为:"; t=--t1; cout<<t; cout<<"运算结束后,t1的值为:"; cout<<t1; cout<<endl; cout<<"运算t1+=t2的结果为:"; t1+=t2; cout<<t1; cout<<endl; cout<<"此时t1的值为:"; cout<<t1; cout<<"此时t2的值为:"; cout<<t2; cout<<endl; cout<<"运算t1-=t2的结果为:"; t1-=t2; cout<<t1; cout<<"此时t1的值为:"; cout<<t1; cout<<"此时t2的值为:"; cout<<t2; cout<<endl; cout<<"请输入您想增加的秒数:"; cin>>n; t1+=n; cout<<"t1增加"<<n<<"秒后的时间为:"; cout<<t1; cout<<"t2增加"<<n<<"秒前的时间为:"; t2-=n; cout<<t2; cout<<endl; }
11