/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作    者:王蕊*完成日期:2016年5月24日*版 本 号:v1.0**问题描述:实现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);//二目的加减运算符的重载。//返回c所规定的时、分、秒后的时间,//例t1(8,20,25),t2(11,20,50),t1+t2为: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 istream &operator>>(istream &in,CTime &t);friend ostream &operator<<(ostream &out,CTime t);
};
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;
}
// 重载输入运算符>>
istream &operator>>(istream &in,CTime &t)
{char ch1,ch2;while(1){cout<<"请输入时间(hh:mm:ss) ";cin>>t.hour>>ch1>>t.minute>>ch2>>t.second;if (ch1==':' && ch2==':')if (t.hour>-1 && t.hour<24 && t.minute>-1 && t.minute<60 && t.second>-1 && t.second<60) break;cerr<<"时间格式不正确! 请重新输入\n";}return cin;
}
// 重载输出运算符<<
ostream &operator<<(ostream &out,CTime t)
{out<<t.hour<<':'<<t.minute<<':'<<t.second;return out;
}
//比较运算符的重载
bool CTime::operator > (CTime &t) // 判断时间t1>t2
{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)// 判断时间t1<t2
{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)// 判断时间t1==t2
{if (*this<t || *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)// 判断时间t1>=t2
{if (*this<t) return false;return true;
}
bool CTime::operator <= (CTime &t) // 判断时间t1<=t2
{if (*this>t) return false;return true;
}
// 计算时间之和, 返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15
CTime CTime::operator + (CTime &t)
{int h,m,s;s=second+t.second;m=minute+t.minute;h=hour+t.hour;if (s>59){s-=60;m++;}if (m>59){m-=60;h++;}while (h>23) h-=24;CTime t0(h,m,s);return t0;
}
CTime CTime::operator-(int s)  //返回s秒前的时间
{int ss=s%60;int mm=(s/60)%60;int hh=s/3600;CTime t0(hh,mm,ss);return *this-t0;
}
CTime CTime::operator+(int s)   //返回s秒后的时间
{int ss=s%60;int mm=(s/60)%60;int hh=s/3600;CTime t0(hh,mm,ss);return *this+t0;
}
CTime CTime::operator - (CTime &t)  // 计算时间之间的差
{int h,m,s;s=second-t.second;m=minute-t.minute;h=hour-t.hour;if (s<0){s+=60;m--;}if (m<0){m+=60;h--;}while (h<0) h+=24;CTime t0(h,m,s);return t0;
}
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;
}
CTime CTime::operator--(int)//后置--,前一秒
{CTime t=*this;*this=*this-1;return t;
}
//赋值运算符的重载
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)//返回s秒后的时间
{*this=*this+s;return *this;
}
CTime &CTime::operator-=(int s)//返回s秒前的时间
{*this=*this-s;return *this;
}
int main()
{CTime t1,t2,t;cout<<"t1为:";cin>>t1;cout<<"t2为:";cin>>t2;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;cout<<"t1= "<<t1<<endl;cout<<"t2= "<<t2<<endl;cout<<"t=t1++"<<endl;t=t1++;cout<<"t= "<<t<<"    t1= "<<t1<<endl;cout<<"t=++t1"<<endl;t=++t1;cout<<"t= "<<t<<"    t1= "<<t1<<endl;cout<<"t1+t2= "<<t1+t2<<endl;cout<<"t1-t2= "<<t1-t2<<endl;cout<<"t1+2000= "<<t1+2000<<endl;cout<<"t1-5000= "<<t1-5000<<endl;return 0;
}

运行结果:

第十二周项目二-Time类中的运算符重载相关推荐

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

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

  2. 项目3-分数类中的运算符重载

    /* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 5 月 5 日 * 版 本 号:v1. ...

  3. /项目3-分数类中的运算符重载

    /* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 4 月 24 日 * 版 本 号:v1 ...

  4. 第十二周上机实践项目 项目1-实现复数类中的运算符重载 (2)

    问题及代码: [项目-实现复数类中的运算符重载] (1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 class Complex { public:Complex() ...

  5. 第十二周-实现复数类中的运算符重载

    /* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作    者:李德彪 *完成时间:2016年5月23日 * ...

  6. 第7周-项目1-完整实现复数类中的运算符重载-扩展+、-、*、/运算符的功能

    问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:number.cpp *作 者:单昕昕 *完成日期:20 ...

  7. c++第八周【任务1-2】实现复数类中的运算符重载

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: c++第八周 ...

  8. c++第八周【任务1-1】实现复数类中的运算符重载

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: c++第八周 ...

  9. c++第八周【任务1-3】实现复数类中的运算符重载

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: * 作 者: ...

最新文章

  1. 嵌入式编程笔记之六--设备树初体验
  2. mysql导出停机_MySQL自动停机的问题处理实战记录
  3. HDOJ 1233 还是畅通工程
  4. 【错误记录】Groovy 闭包使用报错 ( 闭包中不能直接使用外部对象的方法 | 需要先设置 delegate 代理 )
  5. Flash数据的采集方法-搜房房价走势采集
  6. 并查集(disjoint set)的实现及应用
  7. 【网络安全】一个堆题inndy_notepad的练习笔记
  8. 坚持是一件很难的事情
  9. Wndows下Apache+php+Mysql环境的搭建及其涉及的知识
  10. SpringMVC4零配置--web.xml
  11. wowza rtsp_使用wowza和xuggler将RTMP转为RTSP
  12. 那些年我们一起写过的Python爬虫
  13. ip地址合法性检查 php,php检查验证IP为有效IP地址函数
  14. Nobook虚拟实验室完爆各种传统实验室
  15. C语言也能干大事第十三节(如鹏基础)
  16. 平淡中,一直追梦的人 ----访济南市城市规划设计院副总工程师田洁
  17. 腾讯又签下一工作室,游戏建模未来发展无法想象,你还不抓紧时间?
  18. python实现根据文件名自动分类转移至不同的文件夹
  19. java同步,异步和阻塞,非阻塞的联系和区别
  20. 大数据预测犯罪?不 是预防犯罪!

热门文章

  1. windows 下使用caffy_折腾下Windows下的Elasticsearch安装与使用
  2. zookeeper3.4集群搭建
  3. jstack和线程dump分析
  4. Android 隐藏软键盘
  5. 每天读一遍,不久你就会变!
  6. 如何把一个用户加入sodu组
  7. swfUpload 使用心得
  8. windows 网络规划
  9. U盘无法安全正常弹出和删除如何处理
  10. 利用XSLT把ADO记录集转换成XML