第八周实验报告任务2
2012-04-10 13:18
369 查看
/* (程序头部注释开始) * 程序的版权和版本声明部分 * 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: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秒前的时间 }; //下面实现所有的运算符重载代码。 //为简化编程,请注意通过调用已有函数,利用好各函数之间的关系 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型形参
相关文章推荐
- 第八周实验报告(任务2)
- 《第八周实验报告任务2》
- 第八周实验报告任务1 实现复数类中的运算符重载
- 第八周实验报告任务3 实现分数类中的运算符重载,在分数类中可以完成分数的加减乘除,求反,比较6种关系的运算。
- 第八周实验报告(任务三)【分数的加减乘除】
- 第八周实验报告(任务3)
- 第八周实验报告 任务三
- 第八周实验报告 任务三(改)
- 第八周实验报告 任务二(改)
- 第八周实验报告 任务四(改)
- 第八周实验报告(任务1-方案1)
- 第八周实验报告任务4 实现分数类中的运算符重载,分数类中的对象可以和整数型进行四则运算,且运算符合交换律。
- C++程序设计实验报告(五十一)---第八周任务1-1
- 第八周实验报告任务2 实现Time类中的运算符重载
- 第八周实验报告(任务1-方案2)
- C++程序设计实验报告(五十二)---第八周任务1-2
- C++程序设计实验报告(五十三)---第八周任务1-3
- 《第八周实验报告任务3》
- 第八周实验报告(任务1-方案3)
- C++程序设计实验报告(五十四)---第八周任务二