/*
* Copyright (c) 2011, 烟台大学计算机学院
* All rights reserved.
* 作    者:王静
* 完成日期:2013  年  4 月 24  日
* 版 本 号:v1.0
* 输入描述:
* 问题描述:
* 程序输出:
* 问题分析:
* 算法设计:略
*/ 

#include <iostream>
using namespace std;
class CTime
{private:
//unsigned short int hour;    // 时
//unsigned short int minute;  // 分
//unsigned short int second;  // 秒
int hour;int minute;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);
//二目运算符的重载
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);
CTime operator-=(int s);
};
//下面实现所有的运算符重载代码。
//为简化编程,请注意通过调用已有函数,利用好各函数之间的关系
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;
}
void CTime::display()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
//比较运算符(二目)的重载
bool CTime::operator > (CTime &t)
{
if(hour>t.hour){
return true;
}else{
if(hour==t.hour&&minute>t.minute){
return true;
}else{
if(minute==t.minute&&second>t.second){
return true;
}else{return false;}
}
}
}
bool CTime::operator < (CTime &t)
{
if(hour<t.hour){
return true;
}else{
if(hour==t.hour&&minute<t.minute){
return true;
}else{
if(minute==t.minute&&second<t.second){
return true;
}else{return false;}
}
}
}
bool CTime::operator >= (CTime &t)
{
if(hour>=t.hour){
if(hour==t.hour&&minute>=t.minute){
if(minute==t.minute&&second>=t.second){
return true;
}else{
return false;
}
}else{
return false;
}
}else{
return false;
}
}
bool CTime::operator <= (CTime &t)
{
if(hour<=t.hour){
if(hour==t.hour&&minute<=t.minute){
if(minute==t.minute&&second<=t.second){
return true;
}else{
return false;
}
}else{
return false;
}
}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)//返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15
{
CTime t;
t.hour=hour+c.hour;
t.minute=minute+c.minute;
t.second=second+c.second;
if(t.second>60){
second=t.second%60;
t.minute=t.minute+t.second/60;
if(t.minute>60){
minute=t.minute%60;
t.hour=t.hour+t.minute/60;
if(t.hour>24){
t.hour=t.hour/24;
}t.minute=minute;
}t.second=second;
}
return t;
}
CTime CTime::operator-(CTime &c)//对照+理解
{
CTime t;
t.hour=hour-c.hour;
t.minute=minute-c.minute;
t.second=second-c.second;
int i=0,j=0;
if(t.second<0||t.minute<0||t.hour<0){
for(;t.second<0;i++)
{
t.second+=60;
}t.minute-=i;
for(;t.minute<0;j++)
{
t.minute+=60;
}t.hour-=j;
for(;t.hour<0;)
{
t.hour+=24;
}
}
return t;
}
CTime CTime::operator+(int s)//返回s秒后的时间
{
CTime t;
t.second=s+second;
t.minute=minute;
t.hour=hour;
if(t.second>60){
second=t.second%60;
t.minute=minute+t.second/60;
t.second=second;
if(t.minute>60){
minute=t.minute%60;
t.hour=hour+t.minute/60;
t.minute=minute;
if(t.hour>24){
t.hour=t.hour%24;
}
}
}
return t;
}
CTime CTime::operator-(int s)//返回s秒前的时间
{
CTime t;
int i=0,j=0;
t.second=second-s;
t.minute=minute;
t.hour=hour;
if(t.second<0){
for(;t.second<0;i++)
{
t.second+=60;
}t.minute-=i;
for(;t.minute<0;j++)
{
t.minute+=60;
}t.hour-=j;
for(;t.hour<0;)
{
t.hour+=24;
}
}
return t;
}
//一目运算符的重载
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--()//前置--,前一秒
{
*this=*this-1;
return *this;
}  

//赋值运算符的重载
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(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;
t.display();
t=t1-t2;
t=t1+300;
t.display();
t=t1-300;
t.display();
t=t1++;
t.display();
t=++t1;
t.display();
t1--;
t1.display();
--t1;
t1.display();
t1+=t2;
t1.display();
t1-=t2;
t1.display();
t1+=300;
t1.display();
t1-=300;
t.display();
return 0;
}

运行结果:
(贴图)

心得体会:

项目2-Time类中的运算符重载相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 8-2 实现Time类中的运算符重载

    /* * 作 者: 霍雨佳 * 完成日期:2014 年4月15日 * 版 本 号:v1.0 * 问题描述:实现Time类中的运算符重载 * 样例输入: * 样例输出: * 项目要求:实现Time类中的 ...

  9. 实现复数类中的运算符重载(含有double类型)

    /* * 作 者: 霍雨佳 * 完成日期:2014 年4月15日 * 版 本 号:v1.0 * 问题描述:实现复数类中的运算符重载. * 样例输入: * 样例输出: * 问题分析:一个定义完整的类,是 ...

  10. 8-3 实现分数类中的运算符重载

    /* * 作 者: 霍雨佳 * 完成日期:2014 年4月15日 * 版 本 号:v1.0 * 问题描述:实现分数类中的运算符重载 * 样例输入: * 样例输出: * 项目要求:实现分数类中的运算符重 ...

最新文章

  1. 分布式与集群是一回事儿么?别让这么简单的问题难住你!
  2. Hyper-V内存获取模式 内存权重
  3. .Net Core in Docker极简入门(下篇)
  4. 探讨一下常见支付系统的对外接口
  5. 淘宝天猫店铺,竞争对手卖同款产品,价格比我低,标题一模一样,如何应对?
  6. linux分区挂载点在哪个文件,挂载的信息是存放在哪个文件中?
  7. 用keil怎么擦除_环氧树脂结构胶怎么清洗 结构胶弄到衣服上怎么洗掉
  8. 基于quartz的云调度中心实现
  9. 《图解HTTP》读书笔记(二:各种协议与HTTP协议之间的关系)
  10. 非 ROOT 安卓内录
  11. 最好的录屏软件 WebEx Recorder Editor
  12. 《信息系统设计与分析》读书笔记
  13. Excel筛选出符合自己条件的数据
  14. H5流媒体播放器EasyPlayer视频播放暂停时,画面仍显示码率的问题优化
  15. QQ强制加好友链接,对方不同意我也加
  16. 1N5408-ASEMI整流二极管1N5408
  17. linux登录mysql
  18. Docker下elasticsearch8部署、扩容、基本操作实战(含kibana)
  19. Epic Games CEO,《无尽之剑》创始人Tim Sweeney:下一代智能手机和平板电脑的游戏趋势
  20. EBOOT架构及流程

热门文章

  1. 点击图片实现预览功能
  2. linux配置dns心得体会,dns实训报告心得体会.doc
  3. 纯CSS3模拟iPhone X背景切换动画
  4. Microsoft Visual Studio 2013 产品密匙
  5. 怎么删除win10的系统更新服务器,教你怎么永久删除Win10更新助手(Update Assistant)...
  6. 编程的修炼(中英双语)
  7. 正圆锥体空间方程_数值模拟偏微分方程的三种方法:FDM、FEM及FVM
  8. vivo S16/S15/S12/S10 PRO卡刷线刷系统升级降级推荐成功解决屏幕锁不记得开机锁成功刷好的有效方案
  9. TensorFlow 从入门到精通(13)—— NLP初探:电影评论感情分析
  10. java网络编程--URLEncode和URLDecoder