C++第九周【任务二】定义Time类中的<<和>>运算符重载,实现时间的输入输出

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:【任务2】接第8周任务2                            
* 作    者: 李洪悬                             
* 完成日期:   2012      年   4    月   16     日
* 版 本 号:          
* 对任务及求解方法的描述部分
* 输入描述: 
* 问题描述:定义Time类中的<<和>>运算符重载,实现时间的输入输出
* 程序输出: 
* 程序头部的注释结束
*/
【任务2】接第8周任务2,定义Time类中的<<和>>运算符重载,实现时间的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。



#include <iostream>

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);

	void setTime(int h,int m,int s);

	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所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15

	CTime operator-(CTime &c);//对照+理解

	CTime operator+(int s);//返回s秒后的时间

	CTime operator-(int s);//返回s秒前的时间

	//一目运算符的重载
	CTime operator++(int);//后置++,下一秒

	CTime operator++();//前置++,下一秒

	CTime operator--(int);//后置--,前一秒

	CTime operator--();//前置--,前一秒

	//赋值运算符的重载     
	CTime operator+=(CTime &c);

	CTime operator-=(CTime &c);

	CTime operator+=(int s);//返回s秒后的时间

	CTime operator-=(int s);//返回s秒前的时间
};
//下面实现所有的运算符重载代码。
//为简化编程,请注意通过调用已有函数,利用好各函数之间的关系
CTime::CTime(int h,int m,int s)
{
 hour = h;

 minute = m;

 second = s;
}

void CTime::setTime(int h,int m,int s)
{
 hour = h;

 minute = m;

 second = s;
}


ostream& operator << (ostream&out,CTime&t)
{
	out << t.hour << ":" << t.minute << ":" << t.second << endl;

	return out;

}
//比较运算符(二目)的重载
bool CTime::operator > (CTime &t)
{
	if (hour>t.hour) 

		return true;  

	else if (hour<t.hour) 

		return false;  

	 if (minute>t.minute) 

	   return true;  

	else if (minute<t.minute) 

		return false;  

	 if (second>t.second) 

		return true;  

	 else  if (second<t.second) 

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

		return true;  

	else if (hour>t.hour) 

		return false;  

	 if (minute<t.minute) 

	   return true;  

	else if (minute>t.minute) 

		return false;  

	 if (second<t.second) 

		return true;  

	 else  if (second>t.second) 

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

   }

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

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

	}

bool CTime::operator != (CTime &t)
	{
		if (*this == t)
			 return false; 
	   else 
		   return true;

	}
//二目运算符的重载
	CTime CTime ::operator+(CTime &c)//返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15
	{
		int h,m,s;

		h = hour + c.hour;

		m = minute + c.minute;

		s = second + c.second;

		if (s > 59)
		{
			s -= 60;

			m +=1;
		}
		if (m> 59)
		{
			m -= 60;

			s += 1;
		}
		if (h > 24)
		{
			h -= 24;
		}
		CTime t(h,m,s);

		return t;
	}

CTime CTime ::operator-(CTime &c)//对照+理解
		{
		int h,m,s;

		h = hour - c.hour;

		m = minute - c.minute;

		s = second - c.second;

		if (s < 0)
		{
			s  += 60;

			m -=1;
		}
		if (m<0)
		{
			m += 60;

			h -= 1;
		}
		if (h < 0)
		{
			h += 24;
		}
		CTime t(h,m,s);

		return t;
	}


	CTime CTime ::operator+(int s)//返回s秒后的时间
	{
		int a,b,c;

		a = second + s%60;

		b =minute + ( s / 60 ) %60;

		c = hour + s / 3600;

		if (a > 59)
		{
			a -= 60;

			b +=1;
		}
		if (b> 59)
		{
			b -= 60;

			c += 1;
		}
		if (c > 24)
		{
			c -= 24;
		}

      CTime t(c,b,a);

		return t;
}
	CTime CTime ::operator - (int s)//返回s秒前的时间
	{
		int a,b,c;

		a = second - s%60;

		b =minute - ( s / 60 ) %60;

		c = hour - s / 3600;

		if (a < 0)
		{
			a  += 60;

			b -=1;
		}
		if (b<0)
		{
			b += 60;

			c -= 1;
		}
		if (c < 0)
		{
			c += 24;
		}

		CTime t(c,b,a);

		return t;
}
//一目运算符的重载//太简单了
CTime CTime::operator++(int)//后置++,下一秒
{
	CTime t=*this;

	*this=*this+1;

	return t;
}

CTime CTime::operator++()//前置++,下一秒
{
	*this=*this+1;

	return *this;
}

CTime CTime::operator--(int)//后置--,前一秒
{
	CTime t=*this;

	*this=*this-1;

	return t;
}

CTime CTime::operator--()//前置--,前一秒
{
	*this=*this-1;

	return *this;
}

//赋值运算符的重载   
CTime CTime::operator+=(CTime &c)
{
	*this=*this+c;

	return *this;
}
CTime CTime::operator-=(CTime &c)
{
	*this=*this-c;

	return *this;
}
CTime CTime::operator+=(int s)//返回s秒后的时间
{
	*this=*this+s;

	return *this;
}
CTime CTime::operator-=(int s)//返回s秒前的时间
{
	*this=*this-s;

	return *this;
}

int main()
{
	CTime t1(8,20,25),t2(11,20,50),t;

	cout<<"t1为:";

	cout << t1;

	cout<<"t2为:";

	cout << t2;

	cout<<"下面比较两个时间大小:\n";

	if (t1>t2) cout<<"t1>t2"<<endl;

	if (t1<t2) cout<<"t1<t2"<<endl;

	if (t1==t2) cout<<"t1=t2"<<endl; 

	if (t1!=t2) cout<<"t1≠t2"<<endl;

	if (t1>=t2) cout<<"t1≥t2"<<endl;

	if (t1<=t2) cout<<"t1≤t2"<<endl;

	cout << " 对t1进行测试!"<< endl;

	int s = 17;

	cout << " s = " << s<< endl;

	cout <<"返回s秒后的时间"<<endl;


	t = t1 +s;

	cout << t;


	//一目运算符的重载

	cout <<"后置++,下一秒"<<endl;


	t = t1 ++;

	cout << t;


	cout <<"前置++,下一秒"<<endl;


	t = ++t1;

	cout << t;

	cout <<"后置- -,前一秒"<<endl;


	t = t1 --;

	cout << t;

	cout <<"前置- -,下一秒"<<endl;

	t = --t1;

	cout << t;

	cout <<"进行+=运算"<<endl;

	t = t1 += t2;

	cout << " t1 += t2=" ;

	cout << t;

	cout <<"进行+=运算"<<endl;

	t = t1 += s;

	cout << " t1 += s= " ;

	cout << t;

   system("pause");

	return 0;
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值