第九周实验二

#include<iostream.h>

//using namespace std;

class CTime
{
private:
	
	/*unsigned short */int hour;
	
	/*unsigned short */int minute;
	
	/*unsigned short */int second;
	
public:
	
	CTime(int h = 0, int m =0, int s = 0);
	
	friend istream& operator >> (istream&, CTime&);//运算符重载为友元函数
	
	friend ostream& operator << (ostream&, CTime&);//运算符重载为友元函数
	
	//比较运算符(二目)的重载
	
	bool operator > (CTime &t);
	
	bool operator < (CTime &t);
	
	bool operator >= (CTime &t);
	
	bool operator <= (CTime &t);
	
	bool operator == (CTime &t);
	
	bool operator != (CTime &t);
	
	//二目运算符的重载
	
	CTime operator+(CTime &c);//返回c所规定的时·分·秒后的时间
	
	CTime operator-(CTime &c);
	
	CTime operator+(int s);
	
	CTime operator-(int s);
	
	//一目运算符的重载
	
	CTime operator ++(int);//后置++,下一秒
	
	CTime operator ++();//前置++,下一秒,前置与后置返回值不一样
	
	CTime operator --(int);//后置--,前一秒
	
	CTime operator --();//前置--,前一秒
	
	//赋值运算符的重载
	
	CTime operator +=(CTime &c);
	
	CTime operator -=(CTime &c);
	
	CTime operator +=(int s);
	
	CTime operator -=(int s);
};

istream& operator >> (istream& input, CTime& c)
{
	char f1, f2;
	
	while(1)
	{
		cout << "请输入需要操作的时间(格式:(小时:分钟:秒钟)):";
		
		input >> c.hour >> f1 >> c.minute >> f2 >> c.second;
		
		if(c.hour > 24 || c.hour < 0 || c.minute > 60 || c.minute < 0 || c.second > 60 || c.second < 0 )
		{
			cout << "输入时间有误!!!"<< endl;
		}
		
		else
		{
			if(f1 != ':' || f2 != ':')
				cout << "输入格式有误!!!" << endl;
			
			else
				break;
		}
	}
	
	return input;
}

ostream& operator << (ostream& output, CTime& c)
{
	output << c.hour << ":" << c.minute << ":" << c.second <<endl;
	
	return output;
}

CTime::CTime(int h , int m, int s)
{
	hour = h;
	
	minute = m;
	
	second = s;
}

bool CTime::operator >(CTime &t)
{
	if(hour > t.hour)
	{
		return true;
	}
	else
	{
		if(minute > t.minute)
		{
			return true;
		}
		else
		{
			if(second > t.second)
			{
				return true;
			}
			else
			{
				return false;
			}
		}
	}
}

bool CTime::operator <(CTime &t)
{
	if(hour < t.hour)
	{
		return true;
	}
	else
	{
		if(minute < t.minute)
		{
			return true;
		}
		else
		{
			if(second < t.second)
			{
				return true;
			}
			else
			{
				return false;
			}
		}
	}
}

bool CTime::operator >=(CTime &t)//{if(*this < t)return false; else return true;}
{
	if(hour < t.hour)
	{
		return false;
	}
	else
	{
		if(minute < t.minute)
		{
			return false;
		}
		else
		{
			if(second < t.second)
			{
				return false;
			}
		}
	}
}

bool CTime::operator <=(CTime &t)//{if(*this > t)return false; else return true;}
{
	if(hour > t.hour)
	{
		return false;
	}
	else
	{
		if(minute > t.minute)
		{
			return false;
		}
		else
		{
			if(second > t.second)
			{
				return false;
			}
		}
	}
}

bool CTime::operator ==(CTime &t)
{
	if(hour != t.hour)
	{
		return false;
	}
	else
	{
		if(minute != t.minute)
		{
			return false;
		}
		else
		{
			if(second != t.second)
			{
				return false;
			}
		}
	}
}


bool CTime::operator !=(CTime &t)
{
	if(hour != t.hour)
	{
		return true;
	}
	else
	{
		if(minute != t.minute)
		{
			return true;
		}
		else
		{
			if(second != t.second)
			{
				return true;
			}
			else
			{
				return false;
			}
		}
	}
}

CTime CTime::operator +(CTime &c)
{
	CTime c1;
	
	c1.hour = hour + c.hour;
	
	c1.minute = minute + c.minute;
	
	c1.second = second + c.second;
	
	if(c1.second >= 60)
	{
		c1.second = c1.second - 60;
		
		c1.minute = c1.minute + 1;
	}
	
	if(c1.minute >= 60)
	{
		c1.minute = c1.minute - 60;
		
		c1.hour = c1.hour + 1;
	}
	
	if(c1.hour >= 24)
	{
		c1.hour = c1.hour -24;
	}
	
	return c1;
}

CTime CTime::operator -(CTime &c)
{
	CTime c1;
	
	c1.hour = hour - c.hour;
	
	c1.minute = minute - c.minute;
	
	c1.second = second - c.second;
	
	if(c1.second < 0)
	{
		c1.second = 60 + c1.second;
		
		c1.minute = c1.minute - 1;
	}
	
	if(c1.minute < 0)
	{
		c1.minute =60 + c1.minute;
		
		c1.hour = c1.hour -1;
	}
	
	if(c1.hour < 0)
	{
		c1.hour = 24 + c1.hour;
	}
	
	return c1;
}

CTime CTime::operator +(int s)
{
	CTime c1;
	
	c1.hour = hour;
	
	c1.minute = minute;
	
	c1.second = second + s;
	
	if(c1.second >= 60)
	{	
		c1.minute = c1.minute + (c1.second / 60);
		
		c1.second = c1.second % 60;			
	}
	
	if(c1.minute >= 60)
	{
		c1.hour = c1.hour + (c1.minute / 60);
		
		c1.minute = c1.minute % 60;
	}
	
	if(c1.hour >= 24)
	{
		c1.hour = c1.hour % 24;
	}
	
	return c1;
}

CTime CTime::operator -(int s)
{
	CTime c1;
	
	c1.hour = hour;
	
	c1.minute = minute;
	
	c1.second = second - s;
	
	if(c1.second < 0)
	{	
		c1.minute = c1.minute - 1 - (-c1.second / 60);
		
		c1.second = 60 + c1.second % 60;			
	}
	
	if(c1.minute < 0)
	{
		c1.hour = c1.hour - 1 - (-c1.minute / 60);
		
		c1.minute = 60 + c1.minute % 60;
	}
	
	if(c1.hour < 0)
	{
		c1.hour = 24 + c1.hour;
	}
	
	return c1;
}

CTime CTime::operator ++(int)//定义后置自增运算符 "++"重载函数
{
	CTime temp(* this);
	
	second ++;
	
	if(second >= 60)
	{
		second = second -60;
		
		++ minute;
	}
	if(minute >= 60)
	{
		minute = minute - 60;
		
		++ hour;
	}
	if(hour >= 24)
	{
		hour = hour - 24;
	}
	
	return temp;
}

CTime CTime::operator ++()//定义前置自增运算符"++"重载函数
{
	if(++ second >= 60)
	{
		second = second -60;
		
		++ minute;
		
		if(minute >= 60)
		{
			minute = minute -60;
			
			++ hour;
			
			if(hour >= 24)
			{
				hour = hour - 24;
			}
		}
	}
	
	return * this;
}

CTime CTime::operator --(int)//定义后置自减运算符 "--"重载函数
{
	CTime temp(* this);
	
	second --;
	
	if(second < 0)
	{
		second = 60 + second;
		
		-- minute;
	}
	
	if(minute < 0)
	{
		minute = 60 + minute;
		
		-- hour;
	}
	
	if(hour < 0)
	{
		hour = 24 + hour;
	}
	
	return temp;
}

CTime CTime::operator --()//定义前置自减运算符"--"重载函数{*this = *this -1; return *this;}
{
	if(-- second <= 0)
	{
		second = 60 + second;
		
		-- minute;
	}
	
	if(minute < 0)
	{
		minute = 60 + minute;
		
		-- hour;
	}
	
	if(hour < 0)
	{
		hour = 24 + hour;
	}
	
	return * this;
}

CTime CTime::operator +=(CTime &c)//{*this = *this + c;return *this;}
{
	
	
	hour = hour + c.hour;
	
	minute = minute + c.minute;
	
	second = second + c.second;
	
	if(second >= 60)
	{
		second = second - 60;
		
		minute = minute + 1;
	}
	
	if(minute >= 60)
	{
		minute = minute - 60;
		
		hour = hour + 1;
	}
	
	if(hour >= 24)
	{
		hour = hour -24;
	}
	
	return * this;//从定义前置"++" 来的灵感··int
}

CTime CTime::operator -=(CTime &c)
{	
	hour = hour - c.hour;
	
	minute = minute - c.minute;
	
	second = second - c.second;
	
	if(second < 0)
	{
		second = 60 + second;
		
		minute = minute - 1;
	}
	
	if(minute < 0)
	{
		minute =60 + minute;
		
		hour = hour -1;
	}
	
	if(hour < 0)
	{
		hour = 24 + hour;
	}
	
	return * this;
}

CTime CTime::operator +=(int s)
{
	hour = hour;
	
	minute = minute;
	
	second = second + s;
	
	if(second >= 60)
	{	
		minute = minute + (second / 60);
		
		second = second % 60;			
	}
	
	if(minute >= 60)
	{
		hour = hour + (minute / 60);
		
		minute = minute % 60;
	}
	
	if(hour >= 24)
	{
		hour = hour % 24;
	}
	
	return * this;
}

CTime CTime::operator -=(int s)
{
	hour = hour;
	
	minute = minute;
	
	second = second - s;
	
	if(second < 0)
	{	
		minute = minute - 1 - (-second / 60);
		
		second = 60 + second % 60;			
	}
	
	if(minute < 0)
	{
		hour = hour - 1 - (-minute / 60);
		
		minute = 60 + minute % 60;
	}
	
	if(hour < 0)
	{
		hour = 24 + hour;
	}
	
	return * this;
}

int main()
{
	CTime c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c0, c00, c000,c0000;
	
	cout << "1,实现时间与具体秒数的相减" << endl;
	
	cin >> c1;
	
	cout << "c1 = " << c1;
	
	c000 = c1 - 240;
	
	cout << "c1 - 240 = " << c000 ;
	
	cout << "2,实现时间与具体秒数的相加" << endl;
	
	cin >> c2;
	
	cout << "c2 = " << c2;
	
	c0000 = c2 + 234;
	
	cout << "c2 + 234 = " << c0000 ;
	
	cout << "3.实现两时间的各种比较" << endl;
	
	cout << "c1 > c2" << (c1.operator >(c2)?" 成立":" 不成立") << endl;
	
	cout << "c1 >= c2" << (c1.operator >=(c2)?" 成立":" 不成立") << endl;
	
	cout << "c1 == c2" << (c1.operator ==(c2)?" 成立":" 不成立") << endl;
	
	cout << "4.实现两时间的各种比较" << endl;
	
	cin >> c3;
	
	cout << "c3 = " << c3;
	
	cin >> c4;
	
	cout << "c4 = " << c4;
	
	cout << "c3 < c4" << (c3.operator <(c4)?" 成立":" 不成立") << endl;
	
	cout << "c3 <= c4" << (c3.operator <=(c4)?" 成立":" 不成立") << endl;
	
	cout << "c3 != c4" << (c3.operator !=(c4)?" 成立":" 不成立") << endl;
	
	cout << "5.实现两时间的相加减" << endl;
	
	cin >> c5;
	
	cout << "c5 = " << c5;
	
	c0 = c1 + c5;
	
	cout << "c1 + c5 = " << c0 ;
	
	c00 = c1 - c5;
	
	cout << "c1 - c5 = " << c00 ;
	
	cout << "6.实现时间的后置自加运算" << endl;
	
	cin >> c6;
	
	cout << "c6 = " << c6;
	
	c6	++;
	
	cout << "c6++ = " << c6;
	
	cout << "7.实现时间的前置自加运算" << endl;
	
	cin >> c7;
	
	cout << "c7 = " << c7;
	
	++ c7;
	
	cout << "++c7 = " << c7;
	
	cout << "8.实现时间的后置自减运算" << endl;
	
	cin >> c8;
	
	cout << "c8 = " << c8;
	
	c8 --;
	
	cout << "c8-- = " << c8;
	
	cout << "9.实现时间的前置自减运算" << endl;
	
	cin >> c9;
	
	cout << "c9 = " << c9;
	
	-- c9;
	
	cout << "--c9 = " << c9;
	
	cout << "10.实现时间与时间的+=运算" << endl;
	
	cin >> c10;
	
	cout << "c10 = " << c10;
	
	cin >> c11;
	
	cout << "c11 = " << c11;
	
	c10 += c11;
	
	cout << "(c10 += c11) = " << c10;
	
	cout << "11.实现时间与时间的-=运算" << endl;
	
	cin >> c12;
	
	cout << "c12 = " << c12;
	
	cin >> c13;
	
	cout << "c13 = " << c13;
	
	c12 -= c13;
	
	cout << "(c12 -= c13) = " << c12;
	
	cout << "12.实现时间与具体秒数的+=运算" << endl;
	
	cin >> c14;
	
	cout << "c14 = " << c14;
	
	c14 += 18;
	
	cout<< "(c14 += 18) = " << c14;
	
	cout << "13.实现时间与具体秒数的-=运算" << endl;
	
	cin >> c15;
	
	cout << "c15 = " << c15;
	
	c15 -= 15;
	
	cout << "(c15 -= 15) = " << c15;
	
	//system("pause");
	
	return 0;
}

重点是主函数的改造

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值