/*
* Copyright (c) 2013, 烟台大学计算机学院
* All rights reserved.
* 作    者:
* 完成日期:2014 年4 月22 日
* 版 本 号:v1.0
* 问题描述:
在第8周项目2基础上
(1)定义对时间对象的自增和自减一目运算符
[cpp] view plaincopyprint?
//一目运算符的重载
CTime operator++(int);//后置++,下一秒
CTime operator++();//前置++,下一秒,前置与后置返回值不一样
CTime operator--( int);//后置--,前一秒
CTime operator--();//前置--,前一秒
(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):hour(h),minute(m),second(s){}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);//二目的加减运算符的重载//返回t规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为20:41:15CTime operator+(CTime &t);CTime operator-(CTime &t);//对照+理解CTime operator+(int s);//返回s秒后的时间CTime operator-(int s);//返回s秒前的时间//二目赋值运算符的重载CTime operator+=(CTime &c);CTime operator-=(CTime &c);CTime operator+=(int s);//返回s秒后的时间CTime operator-=(int s);//返回s秒前的时间//一目运算符的重载CTime operator++( int);//后置++,下一秒CTime operator++();//前置++,下一秒,前置与后置返回值不一样CTime operator--( int);//后置--,前一秒CTime operator--();//前置--,前一秒friend ostream & operator<<(ostream & output,CTime &t);friend istream & operator>>(istream & input,CTime &t);};
//下面实现所有的运算符重载代码。
//时间的输入
istream & operator>>(istream & input,CTime &t)
{cout<<"input hour,minute,second:";input>>t.hour>>t.minute>>t.second;return input;
}
//显示时间<<
ostream & operator<<(ostream & output,CTime &t){output<<t.hour<<':'<<t.minute<<':'<<t.second<<endl;return output;
}
//二目的比较运算符重载
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;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 (*this<t) return false;return true;
}
bool CTime::operator <= (CTime &t) // 判断时间t1<=t2
{if (*this > t) return false;return true;
}
bool CTime::operator ==(CTime &t)
{if (*this<t || *this>t) return false;return true;
}
bool CTime::operator !=(CTime &t)
{if (*this<t || *this>t)return true;return false;
}
//二目的加减运算符的重载
//返回t规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为20:41:15
CTime  CTime::operator+(CTime &t)
{CTime t3;t3.second=second+t.second;t3.minute=minute+t.minute;t3.hour=hour+t.hour;if (t3.second>59){t3.second-=60;t3.minute++;}if (t3.minute>59){t3.minute-=60;t3.hour++;}if (t3.hour>23) t3.hour-=24;return t3;
}
CTime  CTime::operator-(CTime &t)
{CTime c;c=*this;if(c.second<t.second){c.second=c.second+60-t.second;c.minute-=1;}else{c.second-=t.second;}if(c.minute<t.minute){c.minute=c.minute+60-t.minute;c.hour-=1;}else{c.minute-=t.minute;}if(c.hour<t.hour){c.hour=c.hour+12-t.hour;}else{c.hour-=t.hour;}return c;
}
CTime  CTime::operator+(int s)//返回s秒后的时间
{CTime t0;t0.second=s%60;t0.minute=s/60;t0.hour=s/3600;return *this+t0;
}
CTime  CTime::operator-(int s)//返回s秒前的时间
{CTime t0;t0.second=s%60;t0.minute=s/60;t0.hour=s/3600;return *this-t0;
}
//二目运算符的重载
CTime CTime::operator+=(CTime &c)  //可以直接使用已经重载了的加减运算实现
{*this=*this+c;return *this;
}
CTime CTime::operator-=(CTime &c)
{*this=*this-c;return *this;
}
CTime CTime::operator+=(int s)
{*this=*this+s;return *this;
}
CTime CTime::operator-=(int s)
{*this=*this-s;return *this;
}
//一目运算符的重载
CTime CTime::operator++(int)//后置++,下一秒区别有个int无用处
{CTime t=*this;  //后置的是原值,this变了,t还是原来的*this=*this+1;return t;
}CTime CTime::operator++()//前置++,下一秒
{*this=*this+1;return *this;
}CTime CTime::operator--(int)//后置--,前一秒
{CTime t=*this;*this=*this-1;return t;
}
CTime CTime::operator--()//前置--,前一秒
{*this=*this-1;return *this;
}
//自行编制用于测试的main()函数,有些结果不必依赖display()函数,提倡用单步执行查看结果
int main()
{//CTime t1(8,20,25),t2(11,20,50),t;CTime t1,t2,t;cin>>t1>>t2;cout<<"t1为:"<<t1;cout<<"t2为:"<<t2;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<<"下面表示两个时间加减t1..t2形式:\n";t=t1+t2;cout<<"t1+t2="<<t;t=t1-t2;cout<<"t1-t2="<<t;t=t1+2000; //秒cout<<"t1+2000s="<<t;t=t1-2000;  //秒cout<<"t1-2000s="<<t;cout<<"下面表示一个时间的自加自减:\n";t=t1++;cout<<"(t1++)="<<t;t=++t1;cout<<"(++t1)="<<t;t=t1--;cout<<"(t1--)="<<t;t=--t1;cout<<"(--t1)="<<t;cout<<"下面表示两个时间加减t1.=t2形式:\n";t1+=t2;cout<<"t1+=t2***"<<t1;t1-=t2;cout<<"t1-=t2***"<<t1;t1+=2000;cout<<"t1+=2000***"<<t1;t1-=2000;cout<<"t1-=5000***"<<t1;cout<<endl;
}

心得:有点闹心。。。

不够完美应该再输入的地方加入char判断,

“:”是否输入,

后期改善。

第九周项目二时间类的重载<<与>>,一目。相关推荐

  1. 第十二周项目二-Time类中的运算符重载

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月24日*版 本 号:v1. ...

  2. 第九周项目二-我的数组类

    <pre name="code" class="cpp">/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights ...

  3. 第七周项目二-友元类

     /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年4月13日*版 本 号: ...

  4. 第五周项目三-时间类(2)

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年3月29日 *版 本 ...

  5. 第五周项目三-时间类(1)

    <p> </p><div>/* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cp ...

  6. 第五周 项目二 建立链栈算法库

    /* Copyright (c)2017,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第5周项目2--建立链栈算法库.cpp 作 者:孙仁圆 完成日期:2017年 ...

  7. 第十三周项目一-分数类中的运算符重载

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月25日*版 本 号:v1. ...

  8. 第十二周项目三-数组类运算的实现

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月24日*版 本 号:v1. ...

  9. 第十、十一周项目二-存储班长信息的学生类

    <pre name="code" class="cpp">/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights ...

最新文章

  1. javascript的常见对象总结
  2. 山西省能源产业发展动向及投资风险分析报告2021版
  3. iOS 10 的一个重要更新-开发 iMessage 的第三方插件
  4. mongodb 索引建立问题
  5. 小a与黄金街道(欧拉函数)/**模运算规则总结*/
  6. URAL 1830 Help in the RNOS 思路,读题 难度:1
  7. 力扣637. 二叉树的层平均值(JavaScript)
  8. Hibernate Session中的save(),update(),delete(),saveOrUpdate() 细粒度分析
  9. 只用6张图教会AI识别物体,达摩院新方案大幅降低AI数据标注成本
  10. android让文本输入框默认不获取焦点,android EditText 默认情况下不获取焦点(不弹出输入框)...
  11. 《Shell 脚本学习指南 》 -- 背景知识与入门 [第一、二章]
  12. 泛微OA流程存储的数据表解析
  13. @cosme宣布“@cosme THE BEST COSMETICS AWARDS 2020 ”@cosme上半年美妆新品大赏榜单中获奖新产品
  14. 面试产品经理 应该如何介绍自己的优势和劣势?
  15. 请在微信客户端中打开链接是什么鬼 ?
  16. 杂题收录+简要题解3【杭电多校】
  17. 电脑上计算机三个键盘的使用方法,干货:全方面介绍电脑键盘各键功能与组合键使用方法...
  18. UPC10728:Imputation
  19. WIN10下系统缩放比例(DPI)的魔幻设置
  20. html标签(段落标签,换行标签,文本格式化标签和局部标签)-小白学习中

热门文章

  1. 卸载流氓软件奇安信天擎(无需密码,无需关闭自我保护)
  2. metro ui_在Windows 8中同时使用Metro UI和Classic Start Menu
  3. U盘格式化以后容量突然减少 [已解决]
  4. 跟随贺老师学习道路上的收获和感受
  5. Matlab调试技巧(实战篇)(一)
  6. linux socket-recvfrom系统调用
  7. 洛谷P2800 又上锁妖塔
  8. QT QTextEdit 失去焦点之后取消选中态
  9. 日照市职称计算机考试,日照计算机应用能力考试报名时间
  10. Vue props中Object和Array设置默认值