程序代码:

#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. 从零开始写驱动——vfd专用驱动芯片HT16514并行驱动程序编写

    前言 一直看别人搞的 vfd 很漂亮,前段时间淘了个 vfd 模块来,但没有模块资料,还好芯片没有打磨的,良心商家啊.周末抽空来研究一下这个东西. 从零开始 打开外壳 测试线路 查看芯片是 HT165 ...

  2. UVa1585 Score

    #include <stdio.h> int main(){    int T, O, score;    char str[81], *p;    scanf("%d" ...

  3. 第二天(CSS 选择器)

    1.常用的CSS选择器         类型选择器: 例如: p { color : red ; }         后代选择器: 例如: h2 span { font-weight : bold ; ...

  4. IOS 学习笔记(4) 控件 标签(UILabel)的使用方法

    虽说Label的中文翻译是标签标记,但它其实是一个静态文本内容的展现控件. 一般来说,UILabel只是一个只读的文本视图,开发者可以利用UiLabel来展示内容长度有固定上限的文字内容.并且,UIL ...

  5. docker4dotnet

    docker4dotnet #1 – 前世今生 & 世界你好   作为一名.NET Developer,这几年看着docker的流行实在是有些眼馋.可惜的是,Docker是基于Linux环境的 ...

  6. javascript的isPrototypeOf函数的理解

    JavaScript中isPrototypeOf函数方法是返回一个布尔值,指出对象是否存在于另一个对象的原型链中.使用方法: object1.isPrototypeOf(object2)~~~原型链理 ...

  7. JBoss Jopr

    http://rhq.jboss.org/ https://issues.jboss.org/browse/JBPAPP6-947 挺好的网站: http://outofmemory.cn/code- ...

  8. Hbuilder 常用快捷键汇总

    朋友推荐用Hbuilder编辑器,看了下Hbuilder官网和那视频,感觉牛逼哄哄的, 自己也就体验了一下,打开Hbuilder的快捷键列表,每个快捷键都体验了一下,以下展示出来的,每一个都是精华,每 ...

  9. Android---intent传递putStringArrayListExtra

    Intent是Activity与Activity之间,Activity与Service之间传递参数的介质,使用Intent和Bundle在组件之间传递数据,而这两种通常实现的是Java基本对象类型和S ...

  10. hdoj 1824 Let's go home(2-SAT)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1824 思路分析:该问题为2-SAT问题:需要注意逻辑推理的等价性: (1)题目第一个条件:每一个队或者 ...