第9周實驗報告2

/* (程序頭部註釋開始)   
* 程序的版權和版本聲明部分   
* Copyright (c) 2011, 煙臺大學計算機學院學生    
* All rights reserved.   
* 文件名稱:時間類改                               
* 作    者:張旭                                 
* 完成日期:  2012   年   4   月    18  日   
* 版 本 號:略              
* 對任務及求解方法的描述部分   
* 輸入描述:略    
* 問題描述:略    
* 程序輸出:略    
* 程序頭部的註釋結束   
*/  
#include <iostream>
#include <cmath>

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);
	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 istream &operator>>(istream &input, CTime &d);

    friend ostream &operator<<(ostream &output, CTime &d);
};
//下面實現所有的運算符重載代碼。
//爲簡化編程,請注意通過調用已有函數,利用好各函數之間的關係
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)
{
	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)
{
	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)
{
	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)
{
	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)
{
	return CTime(hour + c.hour + (minute + c.minute + (second + c.second) / 60) / 60, (minute + c.minute + (second + c.second) / 60) % 60, (second + c.second) % 60);
}

CTime CTime::operator - (CTime &c)
{
	return CTime(24 * int (hour < c.hour) + hour - c.hour - int(minute < c.minute + int(second < c.second)), 60 * int(minute < c.minute + int(second < c.second)) + minute - c.minute - int(second < c.second), 60 * int(second < c.second) + second - c.second);
}

CTime CTime::operator - (int s)
{
	return CTime(24 * int (hour < s % 3600) + hour - s / 3600 - int (minute < (s % 3600 / 60) + int(second < s)), 60 * int(minute < (s % 3600 / 60 + int(second < s))) + minute - s % 3600 / 60 - int(second < s), 60 * int(second < s) + second - s % 60);
}

CTime CTime::operator + (int s)
{
	return CTime(hour + s / 3600, minute + s % 3600 / 60, (second + s % 60) % 60);
}

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)
{   
	*this = *this + s;
    return *this;  
}  

CTime CTime::operator-=(int s)
{   
	*this = *this - s;
    return *this;  
}  


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

	minute = m;

	second = s;
}

void CTime::display()
{
	cout << "hour (" << hour << ") minute (" << minute << ") second (" << second << ")" << endl;
}

//實現改
istream &operator>>(istream &input, CTime &d)
{
	char c;

	input >> d.hour;

	cin >> c;

	input >> d.minute;

	cin >> c;

	input >> d.second;

	return input;
}

ostream &operator << (ostream &output, CTime &d)
{
	char c = ':';

	output << d.hour << c << d.minute << c << d.second;

	return output;
}

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

	cin >> t;
	cout << t << endl;

	system ("pause");

	return 0;
}

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