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

/* (程序头部注释开始)     
* 程序的版权和版本声明部分     
* Copyright (c) 2011, 烟台大学计算机学院学生      
* All rights reserved.     
* 作    者:       田庆                            
* 完成日期:  2012     年   4    月   16  日     
* 版 本 号:               
     
* 对任务及求解方法的描述部分     
* 输入描述:      
* 问题描述:  定义Complex类中的<<和>>运算符的重载,实现时间的输入和输出, 
* 程序输出:      
* 程序头部的注释结束     
*/   
#include <iostream>  
using namespace std;  
class CTime  
{  
private:  
	unsigned short int hour;    // 时  
	unsigned short int minute;  // 分  
	unsigned short int second;  // 秒 
	bool is_time(int,int,int);//判断时间是否合法

public:  
	CTime(int h=0,int m=0,int s=0);  
	void setTime();  
	void display();  
	//比较运算符(二目)的重载  
	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秒前的时间
	//重载流插入运算符“<<”   
	friend ostream& operator << (ostream&,CTime&);  
	//重载流提取运算符“>>”   
	friend istream& operator >> (istream&,CTime&);
};  
CTime::CTime(int h,int m,int s)  
{  
	hour=h;  
	minute=m;  
	second=s;  
} 
//输入函数定义
void CTime::setTime()  
{
	char c1,c2;
	cout<<"请输入时间(格式 hh:mm:ss)";
	while(1)
	{
		cin>>hour>>c1>>minute>>c2>>second;
		if(c1!=':'||c2!=':')
			cout<<"格式不正确,请重新输入"<<endl;
		else if(!is_time(hour,minute,second))
			cout<<"时间非法,请重新输入"<<endl;
		else
			break;
	}
}
//判断函数是否合法
bool CTime::is_time(int h,int m,int s)
{
	if(h<0||h>23||m<0||m>59||s<0||s>59)
		return false;
	return true;
}

void CTime::display()  
{  
	cout<<hour<<':'<<minute<<':'<<second<<endl;  
}  
//比较运算符(二目)的重载  
bool CTime::operator > (CTime &t) // 判断时间t1>t2    
{    
	if (hour>t.hour)   
		return true;    
	if (hour<t.hour)   
		return false;    
	if (minute>t.minute)   
		return true;    
	if (minute<t.minute)   
		return false;    
	if (second>t.second)   
		return true;    
	else   
		return false;    
}    
// 判断时间t1<t2 
bool CTime::operator < (CTime &t)  
{  
	if(hour<t.hour)  
		return true;  
	else if(hour>t.hour)  
		return false;  
	else if(minute<t.minute)  
		return true;  
	else if(minute>t.minute)  
		return false;  
	else if(second<t.second)  
		return true;  
	else  
		return false;  
}  
bool CTime::operator >= (CTime &t)//判断t1>=t2  
{  
	if(*this<t)  
		return false;  
	else  
		return true;  
}  
bool CTime::operator <= (CTime &t) // 判断时间t1<=t2    
{    
	if (*this>t)  
		return false;    
	return true;    
}    
bool CTime::operator == (CTime &t)// 判断时间t1==t2    
{    
	if (*this<t || *this>t)  
		return false;   
	else  
		return true;    
}   
bool CTime::operator != (CTime &t) // 判断时间t1!=t2    
{    
	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++;  
	}  
	if(m>59)  
	{  
		m-=60;  
		h++;  
	}  
	while(h>23)  
		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--;  
	}  
	if(m<0)  
	{  
		m+=60;  
		h--;  
	}  
	if(h<0)  
		h+=24;  
	CTime t(h,m,s);  
	return t;  
}  
CTime CTime::operator+(int s)//返回s秒后的时间    
{    
	int ss=s%60;    
	int mm=(s/60)%60;    
	int hh=s/3600;    
	CTime t0(hh,mm,ss);    
	return *this+t0;    
}  
CTime CTime::operator-(int s)//返回s秒前的时间  
{    
	int ss=s%60;    
	int mm=(s/60)%60;    
	int hh=s/3600;    
	CTime t0(hh,mm,ss);    
	return *this-t0;    
}   
//一目运算符的重载  
CTime CTime::operator++(int)//后置++,下一秒  
{  
	CTime temp=*this;  
	*this+=1;  
	return temp;  
}  
CTime CTime::operator++()//前置++,下一秒  
{  
	*this+=1;  
	return *this;  
}  
CTime CTime::operator--(int)//后置--,前一秒  
{  
	CTime temp=*this;  
	*this-=1;  
	return temp;  
}  
CTime CTime::operator--()//前置--,前一秒  
{  
	*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;    
}  
ostream& operator << (ostream&output,CTime&c)  
{   
	output<<c.hour <<":"<<c.minute <<":"<<c.second <<endl;   
	return output;  
}     
istream& operator >> (istream& input,CTime & c)  
{   
	input>>c.hour>>c.minute>>c.second;  
	return input;  
}  
void main()  
{  
	int n;
	CTime t1,t2,t; 
	t1.setTime();
	cout<<"t1为:";  
	t1.display(); 
	t2.setTime();
	cout<<"t2为:";  
	t2.display();  
    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;  
	//下面自行设计对其他运算符的重载的测试  
	t1++;  
	cout<<"t1++为 ";  
	t1.display();  
	++t2;  
	cout<<"++t2为 ";  
	t2.display();  

	t=t1+t2;  
	cout<<"t1+t2为: ";  
	t.display();  
	t=t1-t2;  
	cout<<"t1-t2为: ";  
	t.display();  
	t1+=t2;  
	cout<<"t1+=t2为: ";  
	t1.display();  
	t1-=t2;  
	cout<<"t1-=t2为: ";  
	t1.display(); 
	cout<<endl;
	cout<<"现在t1的时间是:";
	t1.display();
	cout<<"输入您想增加的时间以(秒)制:";
	cin>>n;
	cout<<"增加"<<n<<"秒后的时间为:";
	t1=t1+n;
	t1.display();
	cout<<"现在t2的时间为:";
	t2.display();
	cout<<"输入您想减少的时间以(秒)制:";
	cin>>n;
	cout<<"减少"<<n<<"秒后的时间为:";
	t2=t2-n;
	t2.display();
	system("pause");    

}     

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值