在这里插入代码片
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;
}
/