/* (程序頭部註釋開始)
* 程序的版權和版本聲明部分
* 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;
}
第9周實驗報告2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.