C++平时作业——Time类重载运算符

在这里插入代码片Time类重载运算符
首先是我这次作业的一些要求
设计一个时间类Time,要求:
1、包含时(hour),分(minute),秒(second)私有数据成员;
2、包含构造函数,重载关于一时间加上另一时间的加法运算符"+"、重载输出运算符"<<"、重载输入运算符">>"。
要求,定义完Time类后,main函数中声明对象time1,time2,time3,然后实现
cin>>time1>>time2;
time3=time1+time2;
cout<<time3<<endl;
输入描述:
输入时间一、时间二,注意:在main函数中必须用cin>>time1>>time2实现输入
输出描述:
输出两个时间相加的结果,注意,在main函数中必须用cout<<time3<<endl实现输出
输入样例:
12:30:59
2:30:01
输出样例:
15:01:00

因为本次作业我在网上搜索时,无法找到相匹配的程序代码,于是,我决定自己制作代码上传,便于同学们参考。
首先就是要创建一个时间类,并且根据题目要求对“+”,“<<”,">>"进行了符号重载,需要注意的就是一定要加上友元符号friend,因为需要调用类中的私有成员。还有就是再输出时,如果时或分或秒只有个为输出时,前面一定要补0。下面是我一开始的输出结果:
在这里插入图片描述
但我的代码比较麻烦,进行了修改,使用枚举,把所有情况都写了出来,代码就很长。然后询问了一下老师,老师给了一个更好方法,有兴趣的同学可以尝试一下~因为我作业已经提交了,所以就懒得修改了。。。在这里这里插入图片描述
这里用到了另一个函数库一定不要忘了。
在输出输入重载中,千万不要把i,o搞过了,一定要分开。还有如果秒和分超过了59,一定要给前一位加一,然后自己通过求余来变换,而时超过了23只需要赋0就可以了。

代码认真多看几遍,我相信一定可以看懂的,还有,虽然我把代码贴了出来,希望同学还是能够自己手打一下,可以加强记忆和理解。
下图为输出结果,显然,是正确的。
在这里插入图片描述

本文章所有权归属于江南柯守贵,欢迎同学们进行交流。

#include<iostream>
using namespace std;
class Time{
private:
	int hour;
	int minute;
	int second;
public:
    Time(int h,int m,int s)
	{
		hour=h;
		minute=m;
		second=s;
	}
	int getHour()
	{
		return hour;
	}
	int getMinute()
	{
		return minute;
	}
	int getSecond()
	{
		return second;
	}
	friend Time operator+(Time &t1,Time &t2)
    {
    	int h3,m3,s3;
    	h3=t1.getHour()+t2.getHour();
    	m3=t1.getMinute()+t2.getMinute();
    	s3=t1.getSecond()+t2.getSecond();
    	if(s3>59){
    		s3=s3%60;
    		m3+=1;
		}
		if(m3>59){
			m3=m3%60;
			h3+=1;
		}
		if(h3==24){
			h3=0;
		}
		Time t3(h3,m3,s3);
		return t3;
    }
    friend istream &operator >>(istream &in,Time &t)
	{
		char mh1,mh2;
		in>>t.hour>>mh1>>t.minute>>mh2>>t.second;
		return in;
	 } 
	 friend ostream &operator<< (ostream &out,Time &t)
	 {
	 	if(t.hour<10&&t.minute<10&&t.second<10)
	 	{
	 		out<<"0"<<t.hour<<":"<<"0"<<t.minute<<":"<<"0"<<t.second;
		 }
		 else
		    if(t.hour<10&&t.minute<10){
		    	out<<"0"<<t.hour<<":"<<"0"<<t.minute<<":"<<t.second;
			}
			else
			   if(t.hour<10&&t.second<10){
			   	out<<"0"<<t.hour<<":"<<t.minute<<":"<<"0"<<t.second;
			   }
			   else
			      if(t.minute<10&&t.second<10){
			      	out<<t.hour<<":"<<"0"<<t.minute<<":"<<"0"<<t.second;
				  }
				  else
				     if(t.hour<10){
				     	out<<"0"<<t.hour<<":"<<t.minute<<":"<<t.second;
					 }
					 else
					    if(t.minute<10){
					    	out<<t.hour<<":"<<"0"<<t.minute<<":"<<t.second;
						}
						else
						   if(t.second<10){
						   	out<<t.hour<<":"<<t.minute<<":"<<"0"<<t.second;
						   }
						   else
	 	                     out<<t.hour<<":"<<t.minute<<":"<<t.second;
	 return out;	                     
	 }
}; 
int main()
{
	Time time1(0,0,0),time2(0,0,0),time3(0,0,0);
	cin>>time1>>time2;
    time3=time1+time2;
    cout<<time3<<endl;
    return 0;
}
/


  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值