在CTime类中重载和

2024-05-06 06:08
文章标签 重载 类中 ctime

本文主要是介绍在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:15CTime 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;//计算++t1cout<<"++t1 = ";t = ++t1;cout<<t;cout<<endl;cout<<"t1 = ";cout<<t1;//计算t1--cout<<"t1-- = ";t = t1--;cout<<t;cout<<endl;cout<<"t1 = ";cout<<t1;//计算--t1cout<<"--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类中重载和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963588

相关文章

C++操作符重载实例(独立函数)

C++操作符重载实例,我们把坐标值CVector的加法进行重载,计算c3=c1+c2时,也就是计算x3=x1+x2,y3=y1+y2,今天我们以独立函数的方式重载操作符+(加号),以下是C++代码: c1802.cpp源代码: D:\YcjWork\CppTour>vim c1802.cpp #include <iostream>using namespace std;/*** 以独立函数

第二十四章 rust中的运算符重载

注意 本系列文章已升级、转移至我的自建站点中,本章原文为:rust中的运算符重载 目录 注意一、前言二、基本使用三、常用运算符四、通用约束 一、前言 C/C++中有运算符重载这一概念,它的目的是让即使含不相干的内容也能通过我们自定义的方法进行运算符操作运算。 比如字符串本身是不能相加的,但由于C++中的String重载了运算符+,所以我们就可以将两个字符串进行相加、但实际

C++可以被重载的操作符Overloadable operators

C++允许绝大多数操作符被重载,也就是重新定义操作符实现的功能,这样它们的行为可以被设计出来以适应所有的数据类型,包括类。 以下是C++可以被重载的操作符(Overloadable operators): //四则运算符+ - * / %+= -= *= /= %=//比较运算符> >= == != //赋值运算符= //位操作

c++/《重载操作符》

为什么要对运算符进行重载:         C++预定义中的运算符的操作对象只局限于基本的内置数据类型,但是对于我们自定义的类型(类)是没有办法操作的。但是大多时候我们需要对我们定义的类型进行类似的运算,这个时候就需要我们对这么运算符进行重新定义,赋予其新的功能,以满足自身的需求。 <返回类型说明符> operator <运算符符号>(<参数表>) { <函数体> }

java类中定义接口的有哪些好处

第一步:首先是是定义一个类,同时里面定义接口 public class Util { public interface Worker { void work(int a); } } 第二步:定义一个类去实现第一步类中定义的接口 public class Demo implements Worker { @Override public void work(int a) { System

java基础总结10-面向对象6(方法的重载)

1 方法的重载 方法名一样,但参数不一样,这就是重载(overload)。   所谓的参数不一样,主要有两点:第一是参数的个数不一样,第二是参数的类型不一样。只要这两方面有其中的一方面不一样就可以构成方法的重载了。 package cn.galc.test;public class TestOverLoad {void max(int a, int b) {System.out.prin

C++ 第7章 运算符重载

7.1 运算符重载规则 7.1.1 重载运算符的限制 可重载运算符: + - * / % ^ & | ~! = < > += -+ *= /= %=^= &= |= << >> >>= <<= == !=<= >= && || ++ -- ->* , ->[] () new delete 不可重载运算符: . .* :: ?: sizeof 重载运算符函数可以对运算符做出新的解

谈谈函数返回值为什么不能重载

一、函数的定义:       函数将有效的输入值变换为唯一的输出值,同一输入总是对应同一输出。       计算机本质是对抽象数学公式的具体实现,并以此具体实现来解决现实生活中的实际问题。 注:wiki百科对 “函数” 的定义如图,图比较大,请点击打开详情,左右拖动查看 全部内容。 二、悖论      反过来设想一下,如果返回值的类型 能用来 重载,那么对于相同的输入值,程序怎么决定

12 Python面向对象编程:运算符重载

本篇是 Python 系列教程第 12 篇,更多内容敬请访问我的 Python 合集 在理解运算符重载之前我们已经知道了什么是方法重载,方法重载就是子类继承父类并且定义了一个和父类一样的方法。 知道了什么是重载,也知道了什么是运算符(加减乘除等),那么运算符重载也很好理解了,其实就是在类里面也定义一些特殊方法,使得调用这些方法能实现类对象的加减乘除。当然方法名不是随意取的,要和运算符对应

Java中的重载感悟

引言 在面向对象编程语言中,方法重载(Overloading)是一种允许创建具有相同名称但参数列表不同的多个方法的功能。这种方法提高了代码的可读性和组织性,同时也简化了接口设计。本文将详细介绍Java中的方法重载概念、其实现方式以及一些最佳实践。 什么是方法重载? 方法重载是指在同一类中可以定义多个同名的方法,但是这些方法的参数列表必须有所不同。参数列表的不同可以体现在参数的数量、类型或顺序上。