第十二周项目二-Time类中的运算符重载
/**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类中的运算符重载相关推荐
- 第十三周项目一-分数类中的运算符重载
/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年5月25日*版 本 号:v1. ...
- 项目3-分数类中的运算符重载
/* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 5 月 5 日 * 版 本 号:v1. ...
- /项目3-分数类中的运算符重载
/* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:王静 * 完成日期:2013 年 4 月 24 日 * 版 本 号:v1 ...
- 第十二周上机实践项目 项目1-实现复数类中的运算符重载 (2)
问题及代码: [项目-实现复数类中的运算符重载] (1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 class Complex { public:Complex() ...
- 第十二周-实现复数类中的运算符重载
/* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作 者:李德彪 *完成时间:2016年5月23日 * ...
- 第7周-项目1-完整实现复数类中的运算符重载-扩展+、-、*、/运算符的功能
问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:number.cpp *作 者:单昕昕 *完成日期:20 ...
- c++第八周【任务1-2】实现复数类中的运算符重载
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: c++第八周 ...
- c++第八周【任务1-1】实现复数类中的运算符重载
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: c++第八周 ...
- c++第八周【任务1-3】实现复数类中的运算符重载
/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称: * 作 者: ...
最新文章
- 嵌入式编程笔记之六--设备树初体验
- mysql导出停机_MySQL自动停机的问题处理实战记录
- HDOJ 1233 还是畅通工程
- 【错误记录】Groovy 闭包使用报错 ( 闭包中不能直接使用外部对象的方法 | 需要先设置 delegate 代理 )
- Flash数据的采集方法-搜房房价走势采集
- 并查集(disjoint set)的实现及应用
- 【网络安全】一个堆题inndy_notepad的练习笔记
- 坚持是一件很难的事情
- Wndows下Apache+php+Mysql环境的搭建及其涉及的知识
- SpringMVC4零配置--web.xml
- wowza rtsp_使用wowza和xuggler将RTMP转为RTSP
- 那些年我们一起写过的Python爬虫
- ip地址合法性检查 php,php检查验证IP为有效IP地址函数
- Nobook虚拟实验室完爆各种传统实验室
- C语言也能干大事第十三节(如鹏基础)
- 平淡中,一直追梦的人 ----访济南市城市规划设计院副总工程师田洁
- 腾讯又签下一工作室,游戏建模未来发展无法想象,你还不抓紧时间?
- python实现根据文件名自动分类转移至不同的文件夹
- java同步,异步和阻塞,非阻塞的联系和区别
- 大数据预测犯罪?不 是预防犯罪!