设计一个时间类,运用重载函数

设计一个时间类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;
}

 

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值