第八周实验报告任务2

来源:互联网 发布:软件开发过程控制 编辑:程序博客网 时间:2024/04/28 19:22
/* (程序头部注释开始)* 程序的版权和版本声明部分* Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved.* 文件名称:                              * 作    者:王引琳                              * 完成日期:   2012      年   4    月    10    日* 版 本 号:          * 对任务及求解方法的描述部分* 输入描述: * 问题描述: * 程序输出: * 程序头部的注释结束*/【任务2】实现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);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);//二目运算符的重载CTime operator+(CTime &c);//返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15CTime 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秒前的时间};//下面实现所有的运算符重载代码。//为简化编程,请注意通过调用已有函数,利用好各函数之间的关系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;}void CTime::display(){cout<<"("<<hour<<","<<minute<<","<<second<<")";}bool CTime:: operator > (CTime &t){  if(hour>t.hour)return true;else if(hour==t.hour){if(minute>t.minute)return true;else if(minute==t.minute){if(second>t.second)return true;else return false;}else return false;}else return false;}bool CTime:: operator<(CTime &t){   if(hour<t.hour)return true;else if(hour==t.hour){if(minute<t.minute)return true;else if(minute==t.minute){if(second<t.second)return true;else return false;}else return false;}else return false;}bool CTime:: operator >= (CTime &t){  if(hour>t.hour)return true;else if(hour==t.hour){if(minute>t.minute)return true;else if(minute==t.minute){if(second>t.second)return true;else if(second==t.second)return true;else return false;}else return false;}else return false;}bool CTime::operator <= (CTime &t){   if(hour<t.hour)return true;else if(hour==t.hour){if(minute<t.minute)return true;else if(minute==t.minute){if(second<t.second)return true;else if(second==t.second)return true;else return false;}else return false;}else return false;}bool CTime :: operator == (CTime &t)  {      if(hour == t.hour && minute == t.minute && second == t.second)          return true;      else return false;  }    bool CTime :: operator != (CTime &t)  {      if(hour == t.hour && minute == t.minute && second == t.second)          return false;      else return true;  }  //二目运算符的重载CTime CTime::operator+(CTime &c)//返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15{CTime t;t.second=second+c.second;if(t.second>60){t.second=t.second-60;t.minute=minute+c.minute+1;if(t.minute>=60){t.minute=t.minute-60;t.hour=hour+c.hour+1;if(t.hour>23){t.hour=t.hour-24;}}}    t.minute=minute+c.minute;if(t.minute>=60){t.minute=t.minute-60;t.hour=hour+c.hour+1;if(t.hour>23){t.hour=t.hour-24;}}    t.hour=hour+c.hour;if(t.hour>23){t.hour=t.hour-24;}return t;}CTime CTime::operator-(CTime &c)//对照+理解{CTime t1,t2;t1.second =second+60*minute+3600*hour;t2.second =c.second+60*c.minute+3600*c.hour;if(t1.second>t2.second )t1.second =t1.second-t2.second ;else t1.second =t2.second -t1.second ;t1.hour =t1.second /3600;t1.minute =(t1.second %3600)/60;t1.second =(t1.second %3600)%60;return t1;}CTime CTime:: operator+(int s)//返回s秒后的时间{CTime c;c.second=second+s;if(c.second>59){c.minute=minute+c.second/60;c.second=c.second%60;}else c.minute=minute;if(c.minute>59){c.hour=c.minute/60+hour;c.minute=c.minute%60;}else c.hour=hour;if(c.hour>23){c.hour=hour%24;}return c;}CTime CTime::operator-(int s)//返回s秒前的时间{CTime c;c.second=hour*3600+minute*60+second;c.second=c.second-s;c.hour=c.second/3600;c.minute=(c.second%3600)/60;c.second=(c.second%3600)%60;return c;}//一目运算符的重载CTime CTime::operator++(int)//后置++,下一秒{CTime temp(*this);second++;if(second>=60){second-=60;++minute;if(minute>=60){minute-=60;++hour;if(hour>=24){hour-=24;}}}return temp;}CTime CTime::operator++()//前置++,下一秒{if(++second>=60){second-=60;++minute;if(minute>=60){minute-=60;++hour;if(hour>=24){hour-=24;}}}return *this;}CTime CTime::operator--(int)//后置--,前一秒{CTime temp(*this);second=hour*3600+minute*60+second;second=second-1;hour=minute/3600;minute=(second%3600)/60;second=(second%3600)%60;return temp;}CTime CTime::operator--()//前置--,前一秒{CTime temp(*this);second=hour*3600+minute*60+second;second=second-1;hour=second/3600;minute=(second%3600)/60;second=(second%3600)%60;return *this;}//赋值运算符的重载     CTime CTime::operator+=(CTime &c){CTime t;t.second=second+c.second;if(t.second>=60){t.second=t.second-60;t.minute=minute+c.minute+1;if(t.minute>=60){t.minute=t.minute-60;t.hour=hour+c.hour+1;if(t.hour>23){t.hour=t.hour-24;}}}    t.minute=minute+c.minute;if(t.minute>=60){t.minute=t.minute-60;t.hour=hour+c.hour+1;if(t.hour>23){t.hour=t.hour-24;}}    t.hour=hour+c.hour;if(t.hour>23){t.hour=t.hour-24;}return t;}CTime CTime::operator-=(CTime &c){CTime t;t.second =second+60*minute+3600*hour;c.second =c.second+60*c.minute+3600*c.hour;if(t.second>c.second )t.second =t.second-c.second ;else t.second =c.second -t.second ;t.hour =t.second /3600;t.minute =(t.second %3600)/60;t.second =(t.second %3600)%60;return t;}CTime CTime::operator+=(int s)//返回s秒后的时间{CTime c;c.second=second+s;if(c.second>59){c.minute=minute+c.second/60;c.second=c.second%60;}else c.minute=minute;if(c.minute>59){c.hour=c.minute/60+hour;c.minute=c.minute%60;}else c.hour=hour;if(c.hour>23){c.hour=hour%24;}return c;}CTime CTime::operator-=(int s)//返回s秒前的时间{CTime c;c.second=hour*3600+minute*60+second;c.second=c.second-s;c.hour=c.second/3600;c.minute=(c.second%3600)/60;c.second=(c.second%3600)%60;return c;}void main(){CTime t1(8,20,25),t2(11,20,50),t;cout<<"t1为:";t1.display();cout<<"t2为:";t2.display();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;//下面自行设计对其他运算符的重载的测试    t = t1 + t2;      cout << "t1 + t2 = ";      t.display();cout<<endl;t=t1-t2;cout<<"时间相差:";t.display ();cout<<endl;    t=t1+20;cout<<"t1增加20秒之后为:";t.display ();cout<<endl;t=t1-20;cout<<"t1增加20秒之前为:";t.display ();cout<<endl;t=(t1+=t2);cout<<"t1+=t2得:";t.display ();cout<<endl;t=(t1-=t2);cout<<"t1-=t2得:";t.display ();cout<<endl;t=(t1+=20);cout<<"t1+=20得:";t.display ();cout<<endl;t=(t1-=20);cout<<"t1-=20得:";t.display ();cout<<endl;t=++t1;cout<<"++t1:";t.display ();cout<<endl;t=t1++;cout<<"t1++:";t.display ();cout<<endl;    t=--t1;cout<<"--t1:";t.display ();cout<<endl;t=t1--;cout<<"t1--:";t.display ();cout<<endl;system("pause");  }


上机感言:这么多。。。虽然复制粘贴的过程很多,但确实有点晕。感觉二目运算符的重载和赋值运算符的重载差不多,后置++和前置++的区别在于是否有int型形参