在CTime类中重载<<和>>
程序代码:
#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类中重载<<和>>的更多相关文章
- VC++ error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)
在使用诸如:CArray或是 CList等类时,经常会出现此错误 此错误的原因是由于自定义的类的数组项时 有一个操作如 Add() 在这个操作中,实际上需要一个 = 操作,但是这个 =操作在 自定 ...
- C++中重载操作符[ ]
1.首先说说为什么要重载操作符[ ] 主要是因为系统只给了整数类型(int)的重载函数,即只能在方括号中输入整数进行查找,但有时候我们可能存放数据时,下标的类型是自定义的,希望也能像数组直接通过下标访 ...
- c++类运算符重载遇到的函数形参问题
class A { public: A(int arg1, int arg2); ~A(); A &operator = ( A &other); A operator + ( A & ...
- C++走向远洋——50(Time类中的运算符重载、一目,二目比较运算符、二目赋值运算符、二目加减法运算符)
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- java中重载一定在一个类里面吗?
虽然这些概念在翻译成中文的过程中,有很多不同的翻译方式但本质上只有两种说法,就是Override和Overload其中,Overload一般都被翻译成重载而Override的翻译就乱七八糟了,所谓覆盖 ...
- delphi 中record 的类操作符重载简介
今天简单介绍一下 delphi 中record 的类操作符重载使用,就是如何 实现 record 之间的简单操作. 关于类操作符重载 ,大家可以看官方的文档. Delphi allows certai ...
- C++解析(16):友元与类中的函数重载
0.目录 1.友元的尴尬能力 2.类中的函数重载 3.小结 1.友元的尴尬能力 什么是友元? 友元是C++中的一种关系 友元关系发生在函数与类之间或者类与类之间 友元关系是单项的,不能传递 友元的用法 ...
- Kotlin操作符重载:把标准操作加入到任何类中(KAD 17)
作者:Antonio Leiva 时间:Mar 21, 2017 原文链接:https://antonioleiva.com/operator-overload-kotlin/ 就像其他每种语言一样, ...
- C++类中的一些细节(重载、重写、覆盖、隐藏,构造函数、析构函数、拷贝构造函数、赋值函数在继承时的一些问题)
1 函数的重载.重写(重定义).函数覆盖及隐藏 其实函数重载与函数重写.函数覆盖和函数隐藏不是一个层面上的概念.前者是同一个类内,或者同一个函数作用域内,同名不同参数列表的函数之间的关系.而后三者是基 ...
随机推荐
- codeforces 374D. Inna and Sequence 线段树
题目链接 给m个数, n个操作, 一个数列, 初始为空.一共有3种操作, 在数列末尾加0, 加1, 或删除位置为a[i]的数, a[i]为初始给的m个数, 如果a[i]大于数列长度, 那么什么也不发生 ...
- HTML+CSS笔记 CSS中级 颜色&长度值
颜色值 在网页中的颜色设置是非常重要,有字体颜色(color).背景颜色(background-color).边框颜色(border)等,设置颜色的方法也有很多种: 1.英文命令颜色 语法: p{co ...
- 10-C语言函数
目录: 一.函数 二.return与exit关键字 三.递归与递推 回到顶部 一.函数 1 函数由函数名.返回值.形参.函数体组成. 函数的使用分三个步骤:声明.定义.调用 2 语法格式: 返回值类型 ...
- javascript变量说明
定义变量 var test = "hi"; 在这个例子中,声明了变量 test,并把它的值初始化为 "hi"(字符串).由于 ECMAScript 是弱类型的, ...
- bootstrap读书笔记
引入bootstrap.js或单个插件的js文件 若引入单个插件的js文件,注意插件之间的依赖关系 data属性api data属性的api很方便,但我们也可以选择关闭这个功能:$(document) ...
- Windows Azure 网站自愈
编辑人员注释:本文章由 Windows Azure 网站团队的项目经理Apurva Joshi 撰写. 您有多少次在半夜被叫醒去解决一个仅需重新启动网站即可解决的问题?要是可以自动检测一些状况并自动恢 ...
- poj 2375 Cow Ski Area bfs
这个题目用tarjan找联通块,缩点,然后统计出入度为0的点理论上是可行的,但问题是会暴栈.考虑到这个题目的特殊性,可以直接用一次bfs找到数字相同且联通的块,这就是一个联通块,然后缩点,统计出入度即 ...
- 不重新编译PHP文件的情况下php GD库扩展库的编译安装(centos)
gd-2.0.33.tar.gz http://www.boutell.com/gd/ jpegsrc.v6b.tar.gz http://www.ijg.org/ libpng-1.2.7.tar. ...
- python下使用protobuf
python解决ImportError: No module named google.protobuf 关于protocol buffer的优点,就过多涉及:如果涉及到数据传输和解析,使用pb会比自 ...
- React Native for android 项目驱动教程
第一节 搭建开发环境 第二节 显示页面标题 第三节 实现页面布局 # React native是什么? React Native,是颠覆性的移动开发技术.它使用js开发,又是原生应用,不同于Hybri ...