程序代码:

#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);//设置时间 //重载>>实现输入时间
friend istream& operator >>(istream& input, CTime& c); //重载<<实现输出时间
friend ostream& operator <<(ostream& output, CTime& c); //比較运算符(二目)的重载
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;
} //重载>>实现输入时间
istream& operator >>(istream& input, CTime& c)
{
char ch1, ch2;//保存时和分、分和秒之间的冒号 do
{
input>>c.hour>>ch1>>c.minute>>ch2>>c.second; }while(!(':' == ch1 && ':' == ch2)); return input;
} //重载<<实现输出时间
ostream& operator <<(ostream& output, CTime& c)
{
output<<c.hour<<':'<<c.minute<<':'<<c.second<<endl; return output;
} //比較运算符(二目)的重载
bool CTime::operator > (CTime &t)
{
//计算时间为多少秒
int sec1 = hour * 3600 + minute * 60 + second;
int sec2 = t.hour * 3600 + t.minute * 60 + t.second; if(sec1 > sec2)
{
return true;
}
else
{
return false;
}
} bool CTime::operator < (CTime &t)
{
//计算时间为多少秒
int sec1 = hour * 3600 + minute * 60 + second;
int sec2 = t.hour * 3600 + t.minute * 60 + t.second; if(sec1 < sec2)
{
return true;
}
else
{
return false;
}
} bool CTime::operator >= (CTime &t)
{
//计算时间为多少秒
int sec1 = hour * 3600 + minute * 60 + second;
int sec2 = t.hour * 3600 + t.minute * 60 + t.second; if(sec1 >= sec2)
{
return true;
}
else
{
return false;
}
} bool CTime::operator <= (CTime &t)
{
//计算时间为多少秒
int sec1 = hour * 3600 + minute * 60 + second;
int sec2 = t.hour * 3600 + t.minute * 60 + t.second; if(sec1 <= sec2)
{
return true;
}
else
{
return false;
}
} bool CTime::operator == (CTime &t)
{
//计算时间为多少秒
int sec1 = hour * 3600 + minute * 60 + second;
int sec2 = t.hour * 3600 + t.minute * 60 + t.second; if(sec1 == sec2)
{
return true;
}
else
{
return false;
}
} bool CTime::operator != (CTime &t)
{
//计算时间为多少秒
int sec1 = hour * 3600 + minute * 60 + second;
int sec2 = t.hour * 3600 + t.minute * 60 + t.second; if(sec1 != sec2)
{
return true;
}
else
{
return false;
}
}
//二目运算符的重载
CTime CTime::operator+(CTime &c)//返回c所规定的时、分、秒后的时间。例t1(8,20,25),t2(11,20,50),t1+t2为:41:15
{
//将时间化成秒数
int sec1 = hour * 3600 + minute * 60 + second;
int sec2 = c.hour * 3600 + c.minute * 60 + c.second; //两个时间相加
int sec3 = sec1 + sec2; CTime t1; t1.hour = sec3 / 3600;//计算时间(时)
t1.minute = sec3 % 3600 / 60;//计算时间(分)
t1.second = sec3 % 3600 % 60;//计算时间(秒) return t1;
} CTime CTime::operator-(CTime &c)//对比+理解
{
//将时间化成秒数
int sec1 = hour * 3600 + minute * 60 + second;
int sec2 = c.hour * 3600 + c.minute * 60 + c.second; //两个时间相减
int sec3 = sec1 - sec2; CTime t1; t1.hour = sec3 / 3600;//计算时间(时)
t1.minute = sec3 % 3600 / 60;//计算时间(分)
t1.second = sec3 % 3600 % 60;//计算时间(秒) return t1;
} CTime CTime::operator+(int s)//返回s秒后的时间
{
CTime t; //将时间化成秒数
int sec1 = hour * 3600 + minute * 60 + second; //计算添加s秒后的时间
int sec2 = sec1 + s; t.hour = sec2 / 3600;//计算时间(时)
t.minute = sec2 % 3600 / 60;//计算时间(分)
t.second = sec2 % 3600 % 60;//计算时间(秒) return t;
} CTime CTime::operator-(int s)//返回s秒前的时间
{ CTime t; //将时间化成秒数
int sec1 = hour * 3600 + minute * 60 + second; //计算降低s秒后的时间
int sec2 = sec1 - s; t.hour = sec2 / 3600;//计算时间(时)
t.minute = sec2 % 3600 / 60;//计算时间(分)
t.second = sec2 % 3600 % 60;//计算时间(秒) return t;
} //一目运算符的重载
CTime CTime::operator++( int)//后置++。如i++
{
CTime t = *this;
*this = *this + 1; return t;
} CTime CTime::operator++()//前置++, 如++i;
{
*this = *this + 1; return *this;
} CTime CTime::operator--( int)//后置--, 如i--
{
CTime t = *this;
*this = *this + 1;
return t;
} CTime CTime::operator--()//前置--, 如--i
{
*this = *this - 1; return *this;
} //两个时间相加(this是指向Time类的指针)
CTime CTime::operator+=(CTime &c)
{
*this = *this + c; return *this;
} //两个时间相减(this是指向Time类的指针)
CTime CTime::operator-=(CTime &c)
{
*this = *this - c; return *this;
} //添加s秒
CTime CTime::operator+=(int s)
{
//将时间化成秒数
int sec1 = hour * 3600 + minute * 60 + second; //计算添加s秒后的时间
int sec2 = sec1 + s; CTime t1; t1.hour = sec2 / 3600;//计算时间(时)
t1.minute = sec2 % 3600 / 60;//计算时间(分)
t1.second = sec2 % 3600 % 60;//计算时间(秒) return t1;
} //降低s秒
CTime CTime::operator-=(int s)
{
//将时间化成秒数
int sec1 = hour * 3600 + minute * 60 + second; //计算添加s秒后的时间
int sec2 = sec1 - s; CTime t1; t1.hour = sec2 / 3600;//计算时间(时)
t1.minute = sec2 % 3600 / 60;//计算时间(分)
t1.second = sec2 % 3600 % 60;//计算时间(秒) return t1;
} void main()
{
//定义三个时间对象
CTime t1, t2, t; cout<<"请输入第一个时间:";
cin>>t1; cout<<"请输入第二个时间:";
cin>>t2; //显示第一个时间
cout<<"t1 = ";
cout<<t1; //显示第二个时间
cout<<"t2 = ";
cout<<t2; cout<<"\n以下比較两个时间大小:\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 + t2 = ";
t = t1 + t2;
cout<<t; //两个时间相减
cout<<"t1 - t2 = ";
t = t1 - t2;
cout<<t; //计算t1添加300秒后的时间
cout<<"t1 + 300秒 = ";
t = t1 + 300;
cout<<t; //计算t1降低300秒后的时间
cout<<"t1 - 300秒 = ";
t = t1 - 300;
cout<<t;
cout<<endl; cout<<"t1 = ";
cout<<t1; //计算t1++
cout<<"t1++ = ";
t = t1++;
cout<<t;
cout<<endl; cout<<"t1 = ";
cout<<t1; //计算++t1
cout<<"++t1 = ";
t = ++t1;
cout<<t;
cout<<endl; cout<<"t1 = ";
cout<<t1; //计算t1--
cout<<"t1-- = ";
t = t1--;
cout<<t;
cout<<endl; cout<<"t1 = ";
cout<<t1; //计算--t1
cout<<"--t1 = ";
t = --t1;
cout<<t;
cout<<endl; cout<<"t2 = ";
cout<<t2; cout<<"t = ";
cout<<t; t2 += t; cout<<"运行 t2 += t1 后 t2 = ";
cout<<t2;
cout<<endl; cout<<"t2 = ";
cout<<t2; cout<<"t = ";
cout<<t; t2 -= t; cout<<"运行 t2 -= t1 后 t2 = ";
cout<<t2;
cout<<endl; system("pause");
}

运行结果:

在CTime类中重载&lt;&lt;和&gt;&gt;的更多相关文章

  1. VC++ error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)

    在使用诸如:CArray或是 CList等类时,经常会出现此错误 此错误的原因是由于自定义的类的数组项时 有一个操作如  Add()  在这个操作中,实际上需要一个 = 操作,但是这个 =操作在 自定 ...

  2. C++中重载操作符[ ]

    1.首先说说为什么要重载操作符[ ] 主要是因为系统只给了整数类型(int)的重载函数,即只能在方括号中输入整数进行查找,但有时候我们可能存放数据时,下标的类型是自定义的,希望也能像数组直接通过下标访 ...

  3. c++类运算符重载遇到的函数形参问题

    class A { public: A(int arg1, int arg2); ~A(); A &operator = ( A &other); A operator + ( A & ...

  4. C++走向远洋——50(Time类中的运算符重载、一目,二目比较运算符、二目赋值运算符、二目加减法运算符)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  5. java中重载一定在一个类里面吗?

    虽然这些概念在翻译成中文的过程中,有很多不同的翻译方式但本质上只有两种说法,就是Override和Overload其中,Overload一般都被翻译成重载而Override的翻译就乱七八糟了,所谓覆盖 ...

  6. delphi 中record 的类操作符重载简介

    今天简单介绍一下 delphi 中record 的类操作符重载使用,就是如何 实现 record 之间的简单操作. 关于类操作符重载 ,大家可以看官方的文档. Delphi allows certai ...

  7. C++解析(16):友元与类中的函数重载

    0.目录 1.友元的尴尬能力 2.类中的函数重载 3.小结 1.友元的尴尬能力 什么是友元? 友元是C++中的一种关系 友元关系发生在函数与类之间或者类与类之间 友元关系是单项的,不能传递 友元的用法 ...

  8. Kotlin操作符重载:把标准操作加入到任何类中(KAD 17)

    作者:Antonio Leiva 时间:Mar 21, 2017 原文链接:https://antonioleiva.com/operator-overload-kotlin/ 就像其他每种语言一样, ...

  9. C++类中的一些细节(重载、重写、覆盖、隐藏,构造函数、析构函数、拷贝构造函数、赋值函数在继承时的一些问题)

    1 函数的重载.重写(重定义).函数覆盖及隐藏 其实函数重载与函数重写.函数覆盖和函数隐藏不是一个层面上的概念.前者是同一个类内,或者同一个函数作用域内,同名不同参数列表的函数之间的关系.而后三者是基 ...

随机推荐

  1. C#中窗体的一些简单运用(Sixteenth Day)

    从今天开始,我们进入到学window form的知识,今天简单的学习了一些控件和事件的运用.没有什么很全面的理论,所以今天就总结下所写的程序.一个简单的注册页面程序 注册页面程序 要求: 1:修改所有 ...

  2. Oracle中的Spool缓冲池技术可以实现Oracle导出txt格式文件

    利用Oracle中的Spool缓冲池技术可以实现Oracle数据导出到文本文件 1.在Oracle PL/SQL中输入缓冲开始命令,并指定输出的文件名: spool d:output.txt; 2.设 ...

  3. java动手动脑课后思考题

    public class SquareInt { public static void main(String[] args) { int result; ; x <= ; x++) { res ...

  4. BZOJ 1058: [ZJOI2007]报表统计( 链表 + set )

    这种题用数据结构怎么写都能AC吧...按1~N弄个链表然后每次插入时就更新答案, 用set维护就可以了... --------------------------------------------- ...

  5. JSP内置对象----response

    response 对象   当客户访问一个服务器的页面时,会提交一个HTTP 请求,服务器收到请求时,返回HTTP 响应.request 对象获取客户请求提交的信息,  与request对象相对应的对 ...

  6. PHP_Yii框架_专辑<一>

    一.PHP主流框架 cakephp—速度比较慢.CI(codeIgniter)—小型.symfony. TP(thinkphp)—国人开发.小型.zendframework(官方)—大型 Yii: 特 ...

  7. uncompyle2 windows安装和使用方法

    uncompyle2是Python 2.7的反编译工具,它可以把python生成的pyo.pyc字节码文件反编译为十分完美的源码,并可以将反编译后的源码再次生成字节码文件! ----- 本文介绍在wi ...

  8. IOS本地化。

    1,项目名本地化 点击项目,蓝色图标->info 最下面+号,添加chinese本地化. Supporting Files->infoPlist.strings 下会有两个文件,有一个是设 ...

  9. struts2上传下载

    struts上传下载必须引入两个jar文件: commons-fileupload-x.x.x.jar和comons-io-x.x.x.jar上传文件 import java.io.BufferedI ...

  10. IAR Embedded Workbench for ARM 6.50.6 & 6.60.1 破解补丁

    IAR EWARM 6.50.6 & 6.60.1 破解 破解原理和方法见:http://blog.csdn.net/chivalrys/article/details/8564568 IAR ...