第九周C++报告二。定义Time类中的运算符重载,实现时间的输入输出

【任务2】接第8周任务2,定义Time类中的<<和>>运算符重载,实现时间的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然

 

 

#include          
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 < (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 <t2) cout<<"t1>t2"<=t2) cout<<"t1≥t2"<

 
  


 

 

 

 

 

你可能感兴趣的:(cpp)