设计一个时间类Time,要求:
(1)包含时(hour)、分(minute)和秒(second)私有数据成员。
(2)包含构造函数,重载关于一时间加上另一时间的加法运算符+、重载关于一时间减去另一时间的减加运算符-、重载输出运算符<<与输入运算符>>等。
#include <iostream.h>
#include <math.h> //保证重载插入、提取运算符在VC环境下运行
class Time
{
private: //将时、分、秒分别设置为私有数据成员
int hour;
int minute;
int second;
public:
Time(int h=0,int m=0,int s=0) //定义构造函数,将时、分、秒初始化
{
hour=h;
minute=m;
second=s;
}
friend ostream& operator<<(ostream &output,Time &T1); //分别将插入、提取、加、减运算符设置为友元运算符重载函数
friend istream& operator>>(istream &input,Time &T2); //不可以将插入、提取运算符设置为成员重载函数,因为它的左操作符不是类中的
friend Time operator+(Time &t1,Time &t2); //或者也可以将加、减运算符重载函数设置为成员重载函数
friend Time operator-(Time &t3,Time &t4); //但是不可以将他们设置为类外定义的重载函数,因为此时不可以访问私有数据成员
};
ostream &operator<<(ostream &output,Time &T1) //构造友元提取符重载函数,将时、分、秒输出
{
output<<T1.hour<<"时"<<T1.minute<<"分"<<T1.second<<"秒";
return output;
}
istream& operator>>(istream &input,Time &T1) //构造友元插入符重载函数,输入时、分、秒
{
cout<<"请输入时间:"<<endl;
input>>T1.hour;
input>>T1.minute;
input>>T1.second;
return input;
}
Time operator+(Time &t1,Time &t2) //构造友元加号符重载函数
{
Time temp1; //定义一个时间新对象
temp1.hour=t1.hour+t2.hour; //分别将原始两个时间的时、分、秒相加成为新对象的时、分、秒
temp1.second=t1.second+t2.second;
temp1.minute=t1.minute+t2.minute; //分别按秒、分、时的顺序考虑超出范围的情况,由于相加并且输入正确,那么秒、分的范围在0-118之间,时在0-正无穷
if(temp1.second>59) //当秒大于59,秒的范围在59-118,所以分只会加1(或者直接对60做除,然后用强制类型转换成int),此时秒对60取余数
{
temp1.minute=temp1.minute+1;
temp1.second=temp1.second%60;
}
if(temp1.minute>59) //当分大于59,分的范围在59-118,所以时只会加1(或者直接对60做除,然后用强制类型转换成int),此时分对60取余数
{
temp1.hour=temp1.hour+(int)temp1.minute/60;
temp1.minute=temp1.minute%60;
}
if(temp1.hour>24) //当时大于24,则用时减去24乘时对24整除的数,或者也可以用循环,一直到时为负数前停止
{
temp1.hour=temp1.hour-24*((int)temp1.hour/24);
}
return temp1;
}
Time operator-(Time &t3,Time &t4) //构造友元减号符重载函数
{
Time temp2; //定义一个时间新对象
temp2.hour=t3.hour-t4.hour; //分别将原始两个时间的时、分、秒相减成为新对象的时、分、秒
temp2.second=t3.second-t4.second;
temp2.minute=t3.minute-t4.minute; //分别按秒、分、时的顺序考虑超出范围的情况,由于相减并且输入正确,那么秒、分的范围在-59-59之间,时在-24-24
if(temp2.second<0) //当秒小于0,秒的范围在-59-59,所以分只会减1(或者直接对60做除,然后用强制类型转换成int),此时秒加上60
{
temp2.minute=temp2.minute-1;
temp2.second=temp2.second+60;
}
if(temp2.minute<0) //当分小于0,秒的范围在-59-59,所以时只会减1(或者直接对60做除,然后用强制类型转换成int),此时分加上60
{
temp2.hour=temp2.hour-1;
temp2.minute=temp2.minute+60;
}
if(temp2.hour<0) //当时小于0,时的范围在-24-24,所以让时加上24就可以
{
temp2.hour=24+temp2.hour;
}
return temp2;
}
int main()
{
Time A1,A2,total1,total2; //分别定义四个对象,其中两个用来输入时间,另外两个用来得到加减的结果并且输出
cin>>A1;
cout<<"第一个时间:"<<A1<<endl;
cin>>A2;
cout<<"第二个时间:"<<A2<<endl;
total1=A1+A2;
cout<<"计算两者相加的时间:"<<total1<<endl;
total2=A1-A2;
cout<<"计算两者相减的时间:"<<total2<<endl;
return 0;
}