第八周 任务二 Myth丶恋晨 2022-06-13 10:19 202阅读 0赞 /* 实验内容:实现Time类中的运算符重载 * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: 实现Time类中的运算符重载 * 作 者: 薛广晨 * 完成日期: 2012 年 4 月 7 日 * 版 本号: x1.0 */ //【任务2】实现Time类中的运算符重载 #include <iostream> #include<iomanip> 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){} void setTime(int h, int m, int s) { hour = h; minute = m; second = s; } void display(); /*void add_seconds(int); //增加n秒钟 void add_minutes(int); //增加n分钟 void add_hours(int); //增加n小时 */ //比较运算符(二目)的重载 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秒前的时间 }; //下面实现所有的运算符重载代码。 //为简化编程,请注意通过调用已有函数,利用好各函数之间的关系 void CTime :: display() { cout << setw(2) << setfill('0') << hour << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second << endl; } 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 false; else if(hour == t.hour) { if(minute < t.minute)return false; else if(minute == t.minute) { if(second < t.second)return false; else return true; } else return true; } else return true; } bool CTime :: operator <= (CTime &t) { if(hour > t.hour)return false; else if(hour == t.hour) { if(minute > t.minute)return false; else if(minute == t.minute) { if(second > t.second)return false; else return true; } else return true; } else return true; } 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 c1; c1.second = second + c.second; if(c1.second >= 60) { c1.second = c1.second - 60; c1.minute = minute + 1; if(c1.minute >= 60) { c1.minute = c1.minute - 60; c1.hour = hour + 1; if(c1.hour >= 24)c1.hour = c1.hour - 24; } } c1.minute = minute + c.minute; if(c1.minute >= 60) { c1.minute = c1.minute - 60; c1.hour = c1.hour + 1; if(c1.hour >= 24)c1.hour = c1.hour - 24; } c1.hour = hour + c.hour; if(c1.hour >= 24)c1.hour = c1.hour - 24; return c1; } CTime CTime :: operator-(CTime &c)//对照+理解 { CTime c1, c2; c1.second = hour * 3600 + minute * 60 + second; c2.second = c.hour * 3600 + c.minute * 60 + c.second; if(c1.second > c2.second) { c1.second = c1.second - c2.second; } else c1.second = c2.second - c1.second; c1.hour = c1.second / 3600; c1.minute = (c1.second % 3600) / 60; c1.second = (c1.second % 3600) % 60; return c1; } CTime CTime :: operator+(int s)//返回s秒后的时间 { CTime c1; c1.second = second + s; if (c1.second > 59) { c1.minute = minute + c1.second / 60; c1.second %= 60; } else c1.minute = minute; if (c1.minute > 59) { c1.hour = c1.hour + (c1.minute / 60); c1.minute %= 60; } else c1.hour = hour; if (c1.hour > 23) c1.hour %= 24; return c1; } CTime CTime :: operator-(int s)//返回s秒前的时间 { CTime c1; c1.second = hour * 3600 + minute * 60 + second; c1.second = c1.second - s; c1.hour = c1.second / 3600; c1.minute = (c1.second % 3600) / 60; c1.second = (c1.second % 3600) % 60; return c1; } //一目运算符的重载 CTime CTime::operator++(int)//后置++,下一秒 { CTime temp(*this); second++; if(second >= 60) { second -= 60; ++minute; if(minute >= 60) { minute -= 60; ++hour; if(hour >= 24) hour -= hour; } } return temp; } CTime CTime :: operator++()//前置++,下一秒 { CTime temp(*this); second++; if(second >= 60) { second -= 60; ++minute; if(minute >= 60) { minute -= 60; ++hour; if(hour >= 24) hour -= hour; } } return *this; } CTime CTime :: operator--(int)//后置--,前一秒 { CTime temp(*this); second = hour * 3600 + minute * 60 + second; second -= 1 ; hour = second / 3600; minute = (second % 3600) / 60; second = (second % 3600) % 60; return temp; } CTime CTime :: operator--()//前置--,前一秒 { CTime temp(*this); second = hour * 3600 + minute * 60 + second; second -= 1 ; hour = second / 3600; minute = (second % 3600) / 60; second = (second % 3600) % 60; return *this; } //赋值运算符的重载 CTime CTime :: operator+=(CTime &c) { CTime c1; c1.second = second + c.second; if(c1.second >= 60) { c1.second = c1.second - 60; c1.minute = minute + 1; if(c1.minute >= 60) { c1.minute = c1.minute - 60; c1.hour = hour + 1; if(c1.hour >= 24)c1.hour = c1.hour - 24; } } c1.minute = minute + c.minute; if(c1.minute >= 60) { c1.minute = c1.minute - 60; c1.hour = c1.hour + 1; if(c1.hour >= 24)c1.hour = c1.hour - 24; } c1.hour = hour + c.hour; if(c1.hour >= 24)c1.hour = c1.hour - 24; return c1; } CTime CTime :: operator-=(CTime &c) { CTime c1, c2; c1.second = hour * 3600 + minute * 60 + second; c2.second = c.hour * 3600 + c.minute * 60 + c.second; if(c1.second > c2.second) { c1.second = c1.second - c2.second; } else c1.second = c2.second - c1.second; c1.hour = c1.second / 3600; c1.minute = (c1.second % 3600) / 60; c1.second = (c1.second % 3600) % 60; return c1; } CTime CTime :: operator+=(int s)//返回s秒后的时间 { CTime c1; c1.second = second + s; if (c1.second > 59) { c1.minute = minute + c1.second / 60; c1.second %= 60; } else c1.minute = minute; if (c1.minute > 59) { c1.hour = c1.hour + (c1.minute / 60); c1.minute %= 60; } else c1.hour = hour; if (c1.hour > 23) c1.hour %= 24; return c1; } CTime CTime :: operator-=(int s)//返回s秒前的时间 { CTime c1; c1.second = hour * 3600 + minute * 60 + second; c1.second = c1.second - s; c1.hour = c1.second / 3600; c1.minute = (c1.second % 3600) / 60; c1.second = (c1.second % 3600) % 60; return c1; } 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(); t = t1 - t2; cout << "t1 和 t2的时间差是: "; t.display(); t = t1 + 50; cout << "t1 + 50 = "; t.display(); t = t1 - 50; cout << "t1 - 50 = "; t.display(); t = t1++; cout << "t1++ = "; t.display(); t = ++t1; cout << "++t1 = "; t.display(); t = t1--; cout << "t1-- = "; t.display(); t = --t1; cout << "--t1 = "; t.display(); t = (t1 += t2); cout << "经过t1 += t2运算后为:"; t.display(); t = (t1 -= t2); cout << "经过t1 -= t2运算后为:"; t.display(); t = (t1 += 60); cout << "经过t1 += 60运算后为:"; t.display(); t = (t1 -= 60); cout << "经过t1 -= 60运算后为:"; t.display(); system("pause"); } ![1333800278_9300.jpg][] 上机感言: 好晕啊,这个程序好考验人的逻辑思维能力啊,挺麻烦 [1333800278_9300.jpg]: https://img-my.csdn.net/uploads/201204/07/1333800278_9300.jpg
相关 第17周 任务二 实验目的:学会建立动态链表 实验内容:学会建立动态链表 程序头部注释开始 程序的版权和版本声明部分 Copyright (c) 2011, 短命女/ 2022年06月16日 13:45/ 0 赞/ 139 阅读
相关 第十周 任务二 实验目的:学会使用循环控制语句解决实际问题 实验内容:编写多分支选择结构程序,根据个人月收入总额,计算出应缴税款和税后收入。 include <iostrea 以你之姓@/ 2022年06月16日 13:11/ 0 赞/ 217 阅读
相关 第九周 任务二 / 实验内容:定义Time类中的<<和>>运算符重载 程序的版权和版本声明部分 Copyright (c) 2011, 烟台大学 柔情只为你懂/ 2022年06月13日 12:23/ 0 赞/ 165 阅读
相关 第八周 任务四 / 实验内容:实现分数的运算符重载 程序的版权和版本声明部分 Copyright (c) 2011, 烟台大学计算机学院学生 一时失言乱红尘/ 2022年06月13日 10:19/ 0 赞/ 362 阅读
相关 第八周 任务二 / 实验内容:实现Time类中的运算符重载 程序的版权和版本声明部分 Copyright (c) 2011, 烟台大学计算机学 Myth丶恋晨/ 2022年06月13日 10:19/ 0 赞/ 203 阅读
相关 第八周 任务一 / 实验内容:实现复数类中的运算符重载定义一个复数类重载运算符+、-、、/,使之能用于复数的加减乘除。 程序的版权和版本声明部分 小灰灰/ 2022年06月13日 10:19/ 0 赞/ 207 阅读
相关 第八周 任务三 / 实验内容:实现分数类中的运算符重载 程序的版权和版本声明部分 Copyright (c) 2011, 烟台大学计算机学院学 桃扇骨/ 2022年06月13日 10:19/ 0 赞/ 200 阅读
相关 第六周 任务二 /实验目的:练习使用指针 实验内容:程序填空:按要求将缺少的代码填进去 程序的版权和版本声明部分 Copyright (c) 灰太狼/ 2022年06月13日 06:28/ 0 赞/ 207 阅读
相关 第五周 任务二 /【任务2】C++中提供了多种基本的数据类型。实际上,这些远不能满足我们的需求,如复数(第10章的例子大多是处理虚数的),再如分数。本任务将设计一个简单的分数类,完成对 谁践踏了优雅/ 2022年06月13日 02:51/ 0 赞/ 310 阅读
相关 第十二周 任务二 / (程序头部注释开始) 程序的版权和版本声明部分 Copyright (c) 2012, 烟台大学计算机学院学生 All rig 一时失言乱红尘/ 2022年06月12日 06:08/ 0 赞/ 211 阅读
还没有评论,来说两句吧...