《第九周实验报告任务2》
2012-04-16 18:23
399 查看
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: Time类中“<<与>>” 运算符的重载
* 作 者: 刘江波
* 完成日期: 2012 年 04 月 16 日
* 版 本 号: v.04162
* 对任务及求解方法的描述部分
* 问题描述:
定义Time类中的<<和>>运算符重载,实现时间的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
* 程序头部的注释结束
*/
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: Time类中“<<与>>” 运算符的重载
* 作 者: 刘江波
* 完成日期: 2012 年 04 月 16 日
* 版 本 号: v.04162
* 对任务及求解方法的描述部分
* 问题描述:
定义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):hour(h), minute(m), second(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&); }; //下面实现所有的运算符重载代码。 //为简化编程,请注意通过调用已有函数,利用好各函数之间的关系 ostream& operator << (ostream&output,CTime&t) { output << t.hour << ":" << t.minute<< ":" << t.second; return output; } istream& operator >> (istream&input,CTime&t) { cout << "请输入合法的时间:例(23:12:25)"; char a; do { input >> t.hour >> a >> t.minute >> a >> t.second; } while(a != ':' || t.hour > 24 || t.minute >60 || t.second >60); return input; } bool CTime::operator > (CTime &t)//转换为秒,在进行比较。 { if(hour * 3600 + minute * 60 + second > t.hour * 3600 + t.minute * 60 + t.second) { return true; } else { return false; } } bool CTime::operator < (CTime &t) { if(hour * 3600 + minute * 60 + second < t.hour * 3600 + t.minute * 60 + t.second) { return true; } else { return false; } } bool CTime::operator >= (CTime &t) { if(hour * 3600 + minute * 60 + second >= t.hour * 3600 + t.minute * 60 + t.second) { return true; } else { return false; } } bool CTime::operator <= (CTime &t) { if(hour * 3600 + minute * 60 + second <= t.hour * 3600 + t.minute * 60 + t.second) { return true; } 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 true; } else { return false; } } 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 - (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) { int time; 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) { int time; 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); int time; time = hour * 3600 + minute * 60 + second + 1; hour = time / 3600; time = time % 3600; minute = time / 60; time = time % 60; second = time; return temp;//返回自加前的对象 } CTime CTime::operator ++ ()//前置 { int time; time = hour * 3600 + minute * 60 + second +1; hour = time / 3600; time = time % 3600; minute = time / 60; time = time % 60; second = time; return (*this);//返回自加后的当前对象 } CTime CTime::operator -- (int)//后置 { CTime temp = (*this); int time; time = hour * 3600 + minute * 60 + second - 1; hour = time / 3600; time = time % 3600; minute = time / 60; time = time % 60; second = time; return temp;//返回自减前的对象 } CTime CTime::operator -- ()//前置 { int time; time = hour * 3600 + minute * 60 + second - 1; hour = time / 3600; time = time % 3600; minute = time / 60; time = time % 60; second = time; return (*this);//返回自减后的当前对象 } CTime CTime::operator += (CTime &c) { CTime c2; c2 = (*this) + c;//调用重载运算符,第一个+号 return c2; } CTime CTime::operator -= (CTime &c) { CTime c2; c2 = (*this) - c;//调用重载运算符,第一个-号 return c2; } CTime CTime::operator += (int s) { CTime c2; c2 = (*this) + s;//调用重载运算符,第2个+号 return c2; } CTime CTime::operator -= (int s) { CTime c2; c2 = (*this) - s;//调用重载运算符,第2个-号 return c2; } void main() { CTime t1, t2, t3; cin >> t1 >> t2; cout << "t1为:" << t1 <<endl; cout << "t2为:" << t2 <<endl; 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; t3 = t1 + t2; cout << "t1 + t2 =" << t3 << endl; t3 = t2 - t1; cout << "t2 - t1 =" << t3 << endl; t3 = t1; t3 = t3 + 40; cout << "t1 + 40s =" << t3 << endl; t3 = t2; t3 = t3 - 10; cout << "t2 - 10s =" << t3 << endl; t3 = t1++; cout << "t1++ =" << t3 << endl; t3 = --t2; cout << "--t2 =" << t3 <<endl; t3 = t1; t3 += t2; cout << "t1 += t2 , t1 = " << t3 << endl; t3 = t2; t3 -= 5; cout << "t2 -= 5, t2 = " << t3 << endl; system("pause"); }
相关文章推荐
- 第九周实验报告 任务五
- 第九周实验报告任务二
- 第九周实验报告任务四
- 第九周实验报告任务5 设计一元一次方程类,求形如ax+b=0的方程的解。
- 第九周实验报告(任务一)【Complex类中《和》运算符的重载】
- 第九周实验报告(任务三)【分数类中《和》运算符重载】
- 第九周实验报告(任务四)【一元一次方程类】
- 《第九周实验报告任务5》
- 第九周实验报告任务1
- 第九周实验报告任务5
- 《C++第九周实验报告1-1》--------接第8周任务1,定义Complex类中的<<和>>运算符的重载,实现输入和输出
- 第九周实验报告 任务2 定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
- 《C++第九周实验报告2-1》---接第8周任务2,定义Time类中的<<和>>运算符重载,实现时间的输入输出
- 《第九周实验报告任务1》
- 第九周实验报告(任务二)【Time类中《和》运算符的重载】
- 《C++第九周实验报告3-1》----接第8周任务3,定义分数类中<<和>>运算符重载,实现分数的输入输出
- 第九周实验报告(任务五)【二维数组】
- 第九周实验报告(任务1)
- C++程序设计实验报告(五十七)---第九周任务1
- 第九周实验报告任务 1 定义Time类中的<<和>>运算符重载,实现时间的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。