Time类的运算符重载

题目描述:

设计一个Time类,有hour、minute、second等私有数据成员。 对该类重载+、-和<<运算符。
+运算符函数要实现Time对象和一个正整数n的相加,n理解为秒数,该运算符函数返回当前时间加n秒之后的Time对象。(加之后的时间可能跨到后一天)
-运算符函数重载的第一个版本要实现Time对象和一个正整数n的相减,n理解为秒数,该运算符函数返回当前时间减n秒之后的Time对象。(减之后的时间可能回到前一天)
-运算符函数重载的第二个版本要实现两个Time对象相减(假设两个时间是同一天之内的),该运算符函数返回两个时间相差的秒数。
<<运算符函数重载的目的是为了直接使用cout来输出时间信息。
main函数已经写好,请根据main函数的内容完成该类的设计:
int main(){
int s;
cin>>s;
Time t1(13,30,20);
t1=t1-s;
cout<<t1;
Time t2(21,10,33);
t2=t2+s;
cout<<t2;
cout<<t1-t2<<endl;
return 0; 
}
样例输入:

333

样例输出:

13:24:47
21:16:6
-28279

#include<iostream>
using namespace std;

class Time
{
private:
	int hour;
	int minute;
	int second;
public:
	Time(int hour, int minute, int second)
	{
		if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60
			&& second >= 0 && second < 60)
		{
			this->hour = hour;
			this->minute = minute;
			this->second = second;
		}
		
	}
	Time operator-(int& s)
	{
		int s1, h, m;
		s1 = s % 60;
		h = s / 3600;
		m = (s / 60) % 60;
		hour = hour - h;
		minute = minute - m;
		second = second - s1;
		while (second < 0)
		{
			second += 60;
			minute -= 1;
		}
		while (minute < 0)
		{
			minute += 60;
			hour -= 1;
		}
		while (hour < 0)
		{
			hour += 24;
		}
		return Time(hour, minute, second);
	}
	Time operator+(int& s)
	{
		int s1, h, m;
		s1 = s % 60;
		h = s / 3600;
		m = (s /60) % 60;
		hour = hour + h;
		minute = minute + m;
		second = second + s1;
		while (second > 59)
		{
			second -= 60;
			minute++;
		}
		while (minute > 59)
		{
			minute -= 60;
			hour++;
		}
		while (hour > 23)hour -= 24;

		return Time(hour, minute, second);
	}
	
	int operator-(const Time& c)const
	{
		int n;
		n = hour *3600 + minute * 60 + second - c.hour *3600 - c.minute * 60 - c.second;
		return n;
	}
	friend ostream & operator<< (ostream & out, const Time & c1);
};
ostream& operator<<(ostream& out, const Time& c1)
{
	out << c1.hour <<":" << c1.minute <<":" << c1.second << endl;
	return out;
}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值