2012C++程序設計實驗報告【9.2】

/* (程序頭部註釋開始)
* 程序的版權和版本聲明部分
* Copyright (c) 2011, 煙臺大學計算機學院學生
* All rights reserved.
* 文件名稱:        運算符的重載                
* 作    者:      王琳                      
* 完成日期:    2012     年 4    月   18日
* 版 本 號:    9-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 istream &operator>>(istream &in,CTime &t);
	friend ostream &operator<<(ostream &out,CTime t); 
	//比較運算符(二目)的重載
	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;
}

// 重載輸入運算符>>
istream &operator>>(istream &in,CTime &t)
{
	char ch1,ch2;
	while(1)
	{
		cout<<"請輸入時間(hh:mm:ss) ";
		cin>>t.hour>>ch1>>t.minute>>ch2>>t.second;
		if (ch1==':' && ch2==':')
			if (t.hour>-1 && t.hour<24 && t.minute>-1 && t.minute<60 && t.second>-1 && t.second<60) break;
		cerr<<"時間格式不正確! 請重新輸入";
	}
	return cin;
}

// 重載輸出運算符<<
ostream &operator<<(ostream &out,CTime t)
{
	out<<t.hour<<':'<<t.minute<<':'<<t.second;
	return out;
}

//比較運算符的重載
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;
	return false;
}

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;
	return false;
}

bool CTime::operator == (CTime &t)// 判斷時間t1==t2
{
	if (*this<t || *this>t) return false;
	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) return false;
	return true;
}

bool CTime::operator <= (CTime &t) // 判斷時間t1<=t2
{
	if (*this>t) return false;
	return true;
}

//二目運算符的重載
// 計算時間之和, 返回c所規定的時、分、秒後的時間,例t1(8,20,25),t2(11,20,50),t1+t2爲:41:15
CTime CTime::operator + (CTime &t)
{

	int h,m,s;
	s=second+t.second;
	m=minute+t.minute;
	h=hour+t.hour;
	if (s>59)
	{
		s-=60;
		m++;
	}
	if (m>59)
	{
		m-=60;
		h++;
	}
	while (h>23) h-=24;
	CTime t0(h,m,s);
	return t0;
}

//返回s秒後的時間
CTime CTime::operator+(int 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 - (CTime &t)
{
	int h,m,s;
	s=second-t.second;
	m=minute-t.minute;
	h=hour-t.hour;
	if (s<0)
	{
		s+=60;
		m--;
	}
	if (m<0)
	{
		m+=60;
		h--;
	}
	while (h<0) h+=24;
	CTime t0(h,m,s);
	return t0;
}

//返回s秒前的時間
CTime CTime::operator-(int 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 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,t2,t;

	cout<<"t1爲:";
	cin>>t1;
	cout<<"t2爲:";
	cin>>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;
	cout<<"t1= "<<t1<<endl;
	cout<<"t2= "<<t2<<endl;

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

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

	cout<<"t1+t2= "<<t1+t2<<endl;
	cout<<"t1-t2= "<<t1-t2<<endl;
	cout<<"t1+2000= "<<t1+2000<<endl;
	cout<<"t1-5000= "<<t1-5000<<endl;

	system("pause");
	return 0;
}


運行結果:



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章