第九周C++报告二。定义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):hour(h), minute(m), second(s){};      
	void setTime(int h,int m,int s);   
	friend ostream& operator << (ostream& output, CTime& c);
	friend istream& operator >> (istream& input,  CTime& c);

	//比较运算符(二目)的重载         
	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秒前的时间         
};      
//下面实现所有的运算符重载代码。         
//为简化编程,请注意通过调用已有函数,利用好各函数之间的关系 
istream& operator >> (istream& input,  CTime& c)    
{    
	char c1;      

	input >> c.hour >> c1 >>c.minute >> c1 >> c.second;      
	return input;      
}    
ostream& operator << (ostream& output, CTime& c)    
{    

	output <<c.hour <<':'<< c.minute << ':' << c.second;
	return output;    
}         
void CTime::setTime(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 || (*this) == t)      
	{      
		return true;      
	}      
	else      
	{      
		return false;      
	}      
}      

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

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

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

CTime CTime::operator + (CTime &c)      
{      
	CTime t(*this);      

	t.second+=  c.second;      
	if (t.second >= 60)               
	{            
		t.minute+= t.second/60;              
		t.second%= 60;                  
	}      

	t.minute+=  c.minute;            
	if (t.minute>=60)             
	{            
		t.hour+= t.minute/60;            
		t.minute%= 60;            
	}      

	t.hour+= c.hour;      
	if (t.hour>23)       
	{      
		t.hour%=24;      
	}      
	return t;      
}      

CTime CTime::operator - (CTime &c)      
{            
	CTime t(*this);      

	if (t.second < c.second)               
	{          
		t.second+= 60;      
		t.second-= c.second;      
		t.minute-= 1;         
	}      
	else      
	{      
		t.second-= c.second;      
	}      

	if (t.minute < c.minute)             
	{            
		t.minute+= 60;      
		t.minute-=  c.minute;      
		t.hour-= 1;      
	}      
	else      
	{      
		t.minute-=  c.minute;      
	}      

	if (t.hour < c.hour)       
	{      
		t.hour+=24;      
		t.hour-= c.hour;      
	}      
	else      
	{      
		t.hour-= c.hour;      
	}      
	return t;      
}      
CTime CTime::operator + (int s)      
{      
	CTime t(*this);      

	t.second+= s;       

	if(t.second >= 60)        
	{        
		t.minute = second / 60 + minute;       

		t.second = second % 60;        

		if(t.minute >= 60)        
		{        
			t.hour = hour + minute / 60;      

			t.minute = minute % 60;       

			if(t.hour >= 24)      
			{      
				t.hour%= 24;      
			}      
		}        
	}       
	return t;      
}      
CTime CTime::operator - (int s)      
{      
	CTime t(*this);      

	int x;      

	x = t.hour * 3600 + t.minute * 60 + t.second;      

	x = x - s;      

	t.hour = x / 3600;      

	x = x % 3600;      

	t.minute = x / 60;      

	t.second = x % 60;      

	return t;      
}      

CTime CTime::operator ++ (int)//后置++,下一秒         
{      
	CTime t(*this);      

	int x;      

	x = hour * 3600 + minute * 60 + second;      

	x = x + 1;      

	hour = x / 3600;      

	x = x % 3600;      

	minute = x / 60;      

	second = x % 60;      

	return t;      
}      

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

	int x;      

	x = hour * 3600 + minute * 60 + second;      

	x = x + 1;      

	hour = x / 3600;      

	x = x % 3600;      

	minute = x / 60;      

	second = x % 60;      

	return (*this);      
}      

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

	int x;      

	x = hour * 3600 + minute * 60 + second;      

	x = x - 1;      

	hour = x / 3600;      

	x = x % 3600;      

	minute = x / 60;      

	second = x % 60;      

	return t;      
}      

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

	int x;      

	x = hour * 3600 + minute * 60 + second;      

	x = x - 1;      

	hour = x / 3600;      

	x = x % 3600;      

	minute = x / 60;      

	second = x % 60;      

	return (*this);      
}      

CTime CTime::operator+= (CTime &c)      
{      
	second+=  c.second;                   
	if (second >= 60)               
	{            
		minute+= second/60;              
		second%= 60;                  
	}      

	minute+=  c.minute;            
	if (minute>=60)             
	{            
		hour+= minute/60;            
		minute%= 60;            
	}      

	hour+= c.hour;      
	if (hour>23)       
	{      
		hour%=24;      
	}      
	return (*this);      
}      

CTime CTime::operator-= (CTime &c)      
{                 
	if (second < c.second)               
	{          
		second+= 60;      
		second-= c.second;      
		minute-= 1;         
	}      
	else      
	{      
		second-= c.second;      
	}      

	if (minute < c.minute)             
	{            
		minute+= 60;      
		minute-=  c.minute;      
		hour-= 1;      
	}      
	else      
	{      
		minute-=  c.minute;      
	}      

	if (hour < c.hour)       
	{      
		hour+=24;      
		hour-= c.hour;      
	}      
	else      
	{      
		hour-= c.hour;      
	}      
	return (*this);      
}      

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

	if(second >= 60)        
	{        
		minute = second / 60 + minute;       

		second = second % 60;        

		if(minute >= 60)        
		{        
			hour = hour + minute / 60;      

			minute = minute % 60;       

			if(hour >= 24)      
			{      
				hour%= 24;      
			}      
		}        
	}       
	return (*this);      
}      

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

	x = hour * 3600 + minute * 60 + second;      

	x = x - s;      

	hour = x / 3600;      

	x = x % 3600;      

	minute = x / 60;      

	second = x % 60;      

	return (*this);      
}      
void 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<<endl;      
	//下面自行设计对其他运算符的重载的测试         
	t = t1 + t2;      
	cout << "t1+t2=";      
	cout<<t<<endl;      

	t = t1 - t2;      
	cout << "t1-t2=";      
	cout<<t<<endl;       

	t = t1 + 20;      
	cout << "t1增加20秒:";      
	cout<<t<<endl;       

	t = t1 - 30;      
	cout << "t1减少30秒:";      
	cout<<t<<endl;       

	t = t1;      
	t++;      
	cout << "t1++=";      
	cout<<t<<endl;       

	t = t2;      
	++t;      
	cout << "++t2=";      
	cout<<t<<endl;       

	t = t1;      
	t--;      
	cout << "t1--=";      
	cout<<t<<endl;       

	t = t2;      
	--t;      
	cout << "--t2=";      
	cout<<t<<endl; 

	t = t1;      
	t+=12;      
	cout << "t1后12秒为:";      
	cout<<t<<endl;       

	t = t2;      
	t-=20;      
	cout << "t2前20秒为:";      
	cout<<t<<endl;       

	t = t1;      
	t+=t2;      
	cout << "t1+=t2为:";      
	cout<<t<<endl;      

	t = t1;      
	t-=t2;      
	cout << "t1-=t2为:";      
	cout<<t<<endl;       

	system("pause");      
} 



 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值