设计一个时间类Time,包括时、分、秒等私有数据成员。重载“+”和“-”流运算符重载以实现时间的加法和减法运算。

设计一个时间类Time_百度知道
设计一个时间类Time
秒等私有数据成员、分,如一时间加上另一时间、一时间减去另一时间等包括时。要求实现时间的基本运算
提问者采纳
include&现在时间是;}},y,c).show();&=60){second-=60,b;; cout&lt,z;输入要加的时间;cin&; A:void settime(){cout&&}void show(){ cout& A,minute:&&}hour-=x;&&&public,b;
A;-&0){second+=60, int y ,c,int z){second=second-z;class time{minute+=1;&hour&&quot,a;&c;if(minute&-&hour&&lt,int z){second=second+z;x&a&endl.show();&iostream&&}minute-=y;minute-=1; A;b&gt, cin&gt.jian_time(a;void main(){ time A.show(),y;}void jian_time( A;输入时间;if(second&gt,z);&&if(hour&;if(minute&lt,格式时;z;&& cin&&& cout&0)hour+=24; =24)hour-=24;hour+=1;if(hour& A;}void add_time(int x:&&}minute+=y、分;minute&要减去的时间.add_time(x、秒;&&quot:&quot:&quot,&if(second&&hour-=1.settime();=60){minute-=60;0){minute+=60;&minute&second&&y&}hour+=x;&&&lt
提问者评价
其他类似问题
等待您来回答
为您推荐:
下载知道APP
随时随地咨询
出门在外也不愁热门日志推荐
人人最热标签
分享这篇日志的人常去
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&
请输入手机号,完成注册
请输入验证码
密码必须由6-20个字符组成
下载人人客户端
品评校花校草,体验校园广场设计一个日期类Date,包括年、月、日三个私有数据成员。要求利用运算符重载实现:1日期对象“-”,求得两个日期间相差的天数2日期对象+常量,求得该天的日期
[问题点数:20分,无满意结帖,结帖人fushuiya]
设计一个日期类Date,包括年、月、日三个私有数据成员。要求利用运算符重载实现:1日期对象“-”,求得两个日期间相差的天数2日期对象+常量,求得该天的日期
[问题点数:20分,无满意结帖,结帖人fushuiya]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
本帖子已过去太久远了,不再提供回复功能。& 鸡啄米:C++编程入门系列之四十六(多态性:运算符重载为类的成员函数)
鸡啄米:C++编程入门系列之四十六(多态性:运算符重载为类的成员函数)
&&&&&&&上一节中鸡啄米讲到了,运算符可以重载为类的成员函数或友元函数,这一节就来讲讲运算符怎样重载为类的成员函数。&&&&&& 运算符重载为类的成员函数后就可以像其他成员函数一样访问本类的数据成员了。在类的外部通过类的对象,可以像原运算符的使用方式那样使用重载的运算符,比如,&+&运算符被重载为类A的成员函数后,A的对象a和其他对象b就可以这样进行加法运算:a+b。&&&&&&&重载的运算符可能是也可能是。&&&&&& 如果是双目运算符,比如&+&和&-&,则一个操作数是使用此运算符的对象本身,另一个操作数使用运算符重载函数传递进来的对象。假设有双目运算符U,a为类A的对象,另有某类也可以是A类的对象b,我们想实现a U b这样的运算,就可以把U重载为类A的成员函数,此函数只有一个形参,形参的类型为对象b的类型。这样进行a U b的运算就相当于函数调用:a.operator U(b)。&&&&& &如果是单目运算符,比如&++&和&--&,操作数就是此对象本身,不需要传递参数,只是后置单目运算符语法上规定有一个形式上的参数,以区别于前置单目运算符。&&&&&&&假设有前置单目运算符U,如前置&++&,a为类A的对象,我们想实现U a这样的运算,也可以把U重载为类A的成员函数,此函数没有形参。这样U a表达式就相当于:a.operator U()。&&&&&& 假设有后置单目运算符U,如后置&--&,a为类A的对象,我们想实现a U这样的运算,同样可以把U重载为类A的成员函数,但此函数需要有一个整型的形参。重载后a U表达式就相当于函数调用:a.operator U(0)。&&&&&& 这里鸡啄米需要强调下,前置单目运算符重载和后置单目运算符重载在语法形式上的区别就是前者重载函数没有形参,而后者重载函数有一个整型形参,此形参对函数体没有任何影响,这只是语法上的规定,仅仅是为了区分前置和后置。&&&&& &鸡啄米给大家两个程序例子,分别演示双目运算符和单目运算符的使用。&&&&& &第一个例子:时间值的加法,比如2个小时20分钟加3个小时30分钟,应该是5个小时50分钟,运算规则就是小时数相加,分钟数相加,如果分钟数的和超过60分钟则小时数再加1,分钟数减60。双目运算符&+&需要重载为时间值类的成员函数,此函数只有一个形参,类型也是时间值类的对象。&&&&&& #include &iostream&&&&&& &&&&&& &class CTimeSpan&&&&& &{&&&&& &public:&&&&&&&&&&&&&&&&&& CTimeSpan(int nHours=0, int nMins=0);&&&&& // 构造函数&&&&&&&&&&&&&&&& & CTimeSpan operator +(CTimeSpan ts);&&&&&&& // 运算符&+&重载为成员函数&&&&&&&&&&&&&&&&& &int GetHours()&&&&& { return m_nH }&& // 获取小时数&&&&&&&&&&&&&&&&& &int GetMins()&&&&&& { return m_nM }&&& // 获取分钟数&&&&&&&&&&&&&&&&& &void Show();&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 显示时间值&&&&&&&private:&&&&&&&&&&&&&&& & &int m_nH&&&&&& // 小时数&&&&&&&&&&&&&&&& & int m_nM&&&&&&& // 分钟数&&&&& &};&&&&&& CTimeSpan::CTimeSpan(int nHours, int nMins)&&&&&&&&& // 构造函数的实现&&&&& &{&&&&&&&&&&&&&&&&&&nHours += nMins/60;&&&&&&&&&&&&&&&& &nMins %= 60;&&&&&&&&&&&&&&& & m_nHours = nH&&&&&&&&&&&&&&&& &m_nMins = nM&&&&&& }&&&&& &CTimeSpan CTimeSpan::operator +(CTimeSpan ts)&&& // 重载运算符函数实现&&&&&& {&&&&&&&&&&&&&&&& &int nNewH&&&&&&&&&&&&&&&&& int nNewM&&&&&&&&&&&&&&&& &nNewHours = m_nHours + ts.GetHours();&&&&&&&&&&&&&&&&& nNewMins = m_nMins + ts.GetMins();&&&&&&&&&&&&&&&& &nNewHours += nNewMins/60;&&&&&&&&&&&&&&&& &nNewMins %= 60;&&&&&&&&&&&&&&&& &return CTimeSpan(nNewHours, nNewMins);&& && &}&&&&&& void CTimeSpan::Show()&&&& & {&&&&&&&&&&&&&&&&&cout && m_nHours && &小时& && m_nMins && &分钟& &&&&&& &&}&&&& & int main()&&&&& &{&&&&&&&&&&&&&&& &CTimeSpan timeSpan1(2, 50);&&&&&&&&&&&&&& & CTimeSpan timeSpan2(3, 30);&&&&&&&&&&&&&&& &CTimeSpan timeS&&&&&&&&&&&&&&&&&timeSum = timeSpan1 + timeSpan2;&&&&&&&&&&&&&&& &cout && &timeSpan1: &;&&&&&&&&&&&&&&& &timeSpan1.Show();&&&&&&&&&&&&&&&& cout && &timeSpan2: &;&&&&&&&&&&&&&&&&&timeSpan2.Show();&&&&&&&&&&&&& && timeSum = timeSpan1 + timeSpan2;&&&&&&&&&&&&&& & cout && &timeSum=timeSpan1+timeSpan2: &;&&&&&&&&&&&&&& & timeSum.Show();&&&&&&&&&&&&& && return 0;&&&& & }&&&& & 程序运行结果:&&&&& &timeSpan1: 2小时50分钟&&&& & timeSpan2: 3小时30分钟&&&& & timeSum=timeSpan1+timeSpan2: 6小时20分钟&&&&&&&我们可以看出,运算符重载成员函数跟一般的成员函数类似,只是使用了关键字operator。使用重载运算符的方式与原运算符相同。运算符作用于整型、浮点型和CTimeSpan等不同的对象会发生不同的操作行为,这就是多态性。&&&&&&&注意,重载&+&的函数中,语句return CTimeSpan(nNewHours, nNewMins);看似是对CTimeSpan的调用,实则不然,这是构造一个临时对象并将它返回到主函数中。&&&&&&&第二个例子:时钟类的例子。前置&++&和后置&++&重载为时钟类的成员函数。前置&++&重载函数没有形参,后置&++&重载函数有一个整型形参。&&&&&&& #include&iostream&&&&&&&&&&&&&&& class Clock&//时钟类声明&&&&&&& {&&&&&&& public:&//外部接口&&&&&&&&&&&&&&&&&&&&&Clock(int NewH=0, int NewM=0, int NewS=0);&&&&&&&&&&&&&&&&&&&&&void ShowTime();&&&&&&&&&&&&&&&&&&&&&Clock&& operator ++();& //前置单目运算符重载&&&&&&&&&&&&&&&&&&&&&Clock operator ++(int);& //后置单目运算符重载&&&&&& &private:&//私有数据成员&&&&&&&&&&&&&&&&&&&&&int Hour,Minute,S&&&&&& &};&&&&&& Clock::Clock(int NewH, int NewM, int NewS)&&&&&&&{&&&&&&&&&&&&&&&&&&&& if (0&=NewH && NewH&24 && 0&=NewM && NewM&60 && 0&= NewS && NewS&60)&&&&&&&&&&&&&&&&&& & {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &Hour = NewH;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& & Minute = NewM;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Second = NewS;&&&&&&&&&&&&&&&&&&& &}&&&&&&&&&&&&&&&&&&&& else&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& cout && &错误的时间!& &&&&&&&&&}&&&&&&&void Clock::ShowTime()&&&&&& {&&&&&&&&&&&&&&&&&&&&cout && Hour && &:& && Minute && &:& && Second &&&&&& & }&&&& &Clock& Clock::operator ++()&//前置单目运算符重载函数&&&&&&{&&&&&&&&&&&&&&&&&&&& Second++;&&&&&&&&&&&&&&&&&&&&if(Second&=60)&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &Second=Second-60;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Minute++;&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &if(Minute&=60)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Minute=Minute-60;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& & Hour++;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Hour=Hour%24;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&& &}&&&&&&&&&&&&&&&&&&& &return *&&&&&& }&&&&&&&//后置单目运算符重载&&&&&& Clock Clock::operator ++(int)&&&&& //注意形参表中的整型参数&&&&&&& {&&&&&&&&&&&&&&&&&&&&&& &Clock old=*&&&&&&&&&&&&&&&&&&& ++(*this);&&&&&&&&&&&&&&&&& &&&&&&&&}&&&&&& int main()&&&&&& {&&&&&&&&&&&&&&&&&& Clock myClock(23,59,59);&&&&&&&&&&&&&&&&&&&cout&&&初始时间myClock:&;&&&&&&&&&&&&&&&&&& myClock.ShowTime();&&&&&&&&&&&&&&&&&& cout&&&myClock++:&;&&&&&&&&&&&&&&&& & (myClock++).ShowTime();&&&&&&&&&&&&&&&&&& cout&&&++myClock:&;&&&&&&&&&&&&&&&&& &(++myClock).ShowTime();&&&&&&&&&&&&&&&&&& return 0;&&&&&&&}&&&& & 程序运行结果:&&&&& &初始时间myClock:23:59:59&&&&& &myClock++:23:59:59&&&&& &++myClock:0:0:1&&&&&& 因为后置单目运算符重载函数中的整型形参没有实际意义,只是为了区分前置和后置,所以参数表中只给出类型就行了,参数名写不写都可以。&&&&& &运算符重载部分需要大家认真理解,可以在上运行上面两个例子,然后自己举一反三,写几个简单例子试验下其他运算符。&&&&& &鸡啄米就讲到这了,有问题欢迎在鸡啄米博客交流。谢谢大家。&
除非特别注明,文章均为原创
转载请标明本文地址:
作者:鸡啄米
&&( 21:53:54)&&( 21:25:32)&&( 22:23:2)&&( 22:4:45)&&( 22:22:20)&&( 21:39:22)&&( 23:24:41)&&( 23:12:31)&&( 22:38:42)&&( 22:26:24)
一如既往的支持!!!鸡啄米 于
20:46:23 回复欢迎常来
很好学习了!
继续关注每一次都有新收获鸡啄米 于
20:47:03 回复常来啊
学习~~~~~~
你真的很强呀,干货呀鸡啄米 于
20:47:56 回复过奖过奖
可惜我看不懂呀
过来学习了,谢谢博主的分享。。
博主对这件事有自己的看法呢!
好可爱的小狗啊
纯属路过 顺便支持一下鸡啄米 于
11:53:40 回复常来看看啊
过来了解了解一下啦,嘿嘿
这东西咱依旧不懂乎鸡啄米 于
11:54:31 回复呵呵,西门好久没来了江西SEO 于
14:28:57 回复过年了 忙..
继续支持个。
operator ++();后的&有什么意义啊,好像不要也可以吧鸡啄米 于
23:26:35 回复带&说明返回的是引用类型,也就是返回对象本身,如果不加&则会将返回值拷贝给一个临时对象,这只是一个拷贝而不是原对象了。Pzy 于
23:13:41 回复那为什么后自增那个函数没有用Clock& operator ++(int)这个形式?博主后自增的函数里返回一个局部的变量,会不好吧?解释一下额.初学者不是很懂..
博主..那个时钟的程序运行结果不是这样的吧..因为后自增函数里面有一个++(*this)会调用前自增行数所以没有达到后自增的效果吧??我也不知道用this指针的方法要怎么写..请教一下.
最近发现了这里,然后一直在看,刚看到这一章,在VS2010里自己手动写了一个运算符重载,遇到个问题,特向你请教。如下:class FuShu{
FuShu(int x=0, int y=0);
FuShu operator +(FuShu ts);
private:};FuShu FuShu::operator +(FuShu f){
int x = this-&x + f.x;
int y = this-&y + f.y;
return FuShu(x, y);}在运算符重载函数,传入的参数是一个FuShu的对象f,按照面向对象封装的思想,函数中的f.x和f.y,由于x和y是FuShu类的私有成员变量,应该不能被FuShu类的对象f调用吧,可是在VS2010下却编译、运行都没问题,不知何故?还有在你底十四章中,关于拷贝构造函数,有Point::Point(Point &p)
cout&&&拷贝构造函数被调用&&&
},其中的X和Y也是Point类的私有成员变量,为何也对呢?Nan 于
10:20:03 回复我觉得你把前面的章节类与对象那里再看下就能理解了JackieZhou 于
15:05:28 回复私有类型成员只能由本类中的成员函数访问,外部不能访问.而FuShu operator +(FuShu ts)是成员函数。
同样存在楼上的疑问。
看到这一章,但是前面看的好像又忘了,哎
后置运算符的实现是什么啊,那里直接用一个++(*this);具体的是什么意思啊,难道说++(*this)中的++的作用是和刚刚重载过的前置++是一个意思,那么为什么不用(*this)++呢?求指点!好坏都是风景 于
14:45:28 回复我理解的++(*this)是,此处相当于函数“后置++”调用了“前置++”这个函数。所以直接使用了++(*this)哈哈 于
9:51:25 回复对的,这里就是调用运算符函数进行自增。this指针实际上就隐含于类的成员函数中,它指向成员函数正在操作的对象。
完全随机文章Date类,Time类,多继承的DateTime类
*【项目4】
* 程序的版权和版本声明部分
* Copyright (c)2012, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: object.cpp
* 攻城菜鸟:蛋蛋
* 完成日期:2013年& 5 月& 27 日
* 版本号:& Code Blocks10.05
* 输入描述:正确的日期时间数据
* 问题描述:定义一个日期类Date,数据成员包括年、月、日,SetDate(int y,int m,int d)和PrintDate()函数分别用于设置日期和显示日期;
再定义一个时间类Time,数据成员包括时、分、秒,SetTime(int h,int m,int s)和PrintTime()函数分别用于设置时间和显示时间
在此基础上再定义一个日期时间类TimeDate,充分利用已有的两个类,并编写主函数测试所定义的类结构。
* 程序输出:日期时间
#include &iostream&&&
class Date&
&&& public:&
&&& Date(int y,int m,int d):year(y),month(m),day(d){}&
&&& void setDate(int y=0,int m=0,int d=0){year=y;month=m;day=d;}&
&&& void PrintDate(){cout&&&日期:&&&year&&&年&&&month&&&月&&&day&&&日&&&}&
&&& protected:&
class Time&
&&& public:&
&&& Time(int h,int m,int s):hour(h),minute(m),second(s){}&
&&& void setTime(int h,int m,int s){hour=h;minute=m;second=s;}&
&&& void PrintTime(){cout&&&时间:&&&hour&&&点&&&minute&&&分&&&second&&&秒&&&}&
&&& protected:&
class DateTime:public Date,public Time&
DateTime(int y,int m1,int d,int h,int m2,int s):Date(y,m1,d),Time(h,m2,s){}&
void PrintDateTime(){Date::PrintDate();&
Time::PrintTime();}&
int main()&
&&& DateTime dt(,21,50,12);&
&&& dt.PrintDateTime();&
&&& return 0;&
*【项目4】
* 程序的版权和版本声明部分
* Copyright (c)2012, 烟台大学计算机学院学生
* All rightsreserved.
* 文件名称: object.cpp
* 攻城菜鸟:蛋蛋
* 完成日期:2013年& 5 月& 27 日
* 版本号:& Code Blocks10.05
* 输入描述:正确的日期时间数据
* 问题描述:定义一个日期类Date,数据成员包括年、月、日,SetDate(int y,int m,int d)和PrintDate()函数分别用于设置日期和显示日期;
再定义一个时间类Time,数据成员包括时、分、秒,SetTime(int h,int m,int s)和PrintTime()函数分别用于设置时间和显示时间
在此基础上再定义一个日期时间类TimeDate,充分利用已有的两个类,并编写主函数测试所定义的类结构。
* 程序输出:日期时间
#include &iostream&
class Date
&&& public:
&&& Date(int y,int m,int d):year(y),month(m),day(d){}
&&& void setDate(int y=0,int m=0,int d=0){year=y;month=m;day=d;}
&&& void PrintDate(){cout&&&日期:&&&year&&&年&&&month&&&月&&&day&&&日&&&}
&&& protected:
class Time
&&& public:
&&& Time(int h,int m,int s):hour(h),minute(m),second(s){}
&&& void setTime(int h,int m,int s){hour=h;minute=m;second=s;}
&&& void PrintTime(){cout&&&时间:&&&hour&&&点&&&minute&&&分&&&second&&&秒&&&}
&&& protected:
class DateTime:public Date,public Time
DateTime(int y,int m1,int d,int h,int m2,int s):Date(y,m1,d),Time(h,m2,s){}
void PrintDateTime(){Date::PrintDate();
Time::PrintTime();}
int main()
&&& DateTime dt(,21,50,12);
&&& dt.PrintDateTime();
&&& return 0;
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。

我要回帖

更多关于 流运算符重载 的文章

 

随机推荐