/* (程序頭部註釋開始)
* 程序的版權和版本聲明部分
* Copyright (c) 2011, 煙臺大學計算機學院學生
* All rights reserved.
* 文件名稱: 第九周 任務二
* 作 者: 楊森
* 完成日期: 2012 年 4 月 16 日
* 版 本 號: V 1.0
源程序:
#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){setTime(h, m, s);}
void setTime(int h,int m,int s){if (h >= 60 || m >= 60 || s >= 60) return; hour = h, minute = m, second = s;}
friend ostream&operator << (ostream&,CTime&);
friend istream&operator >> (istream&,CTime&);
//比較運算符(二目)的重載
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秒前的時間
};
//下面實現所有的運算符重載代碼。
//爲簡化編程,請注意通過調用已有函數,利用好各函數之間的關係
bool CTime::operator > (CTime &t)
{
if (hour > t.hour)
return true;
else if (hour == t.hour && minute > t.minute)
return true;
else if (minute == t.minute && second > t.second)
return true;
else
return false;
}
bool CTime::operator < (CTime &t)
{
if (hour < t.hour)
return true;
else if (hour == t.hour && minute < t.minute)
return true;
else if (minute == t.minute && second < t.second)
return true;
else
return false;
}
bool CTime::operator >= (CTime &t)
{
if (hour > t.hour)
return true;
else if (hour == t.hour && minute > t.minute)
return true;
else if (minute == t.minute && second >= t.second)
return true;
else
return false;
}
bool CTime::operator <= (CTime &t)
{
if (hour < t.hour)
return true;
else if (hour == t.hour && minute < t.minute)
return true;
else if (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;
}
bool CTime::operator != (CTime &t)
{
if (hour == t.hour && minute == t.minute && second == t.second)
return false;
else
return true;
}
CTime CTime::operator+(CTime &c)
{
CTime ct(*this);
if (ct.second + c.second >= 60)
{
ct.second = ct.second + c.second - 60;
++ct.minute;
}
else
ct.second = ct.second + c.second;
if (ct.minute + c.minute >= 60)
{
ct.minute = ct.minute + c.minute - 60;
++ct.hour;
}
else
ct.minute = ct.minute + c.minute;
if (ct.hour + c.hour >= 60)
ct.hour = ct.hour + c.hour - 60;
else
ct.hour = ct.hour + c.hour;
return ct;
}
CTime CTime::operator-(CTime &c)
{
CTime ct(*this);
if (ct.second < c.second)
{
--ct.minute;
ct.second = ct.second + 60 - c.second;
}
else
ct.second = ct.second - c.second;
if (ct.minute < c.minute)
{
--ct.hour;
ct.minute = ct.minute + 60 - c.minute;
}
else
ct.minute = ct.minute - c.minute;
if (ct.hour < c.hour)
ct.hour = ct.hour + 24 - c.hour;
else
ct.hour = ct.hour - c.hour;
return ct;
}
CTime CTime::operator+(int s)
{
CTime ct;
ct.hour = s / 3600;
s = s % 3600;
ct.minute = s / 60;
ct.second = s % 60;
return (*this + ct);
}
CTime CTime::operator-(int s)
{
CTime ct;
ct.hour = s / 3600;
s = s % 3600;
ct.minute = s / 60;
ct.second = s % 60;
return (*this - ct);
}
CTime CTime::operator++(int)
{
CTime tp(*this);
*this = *this + 1;
return tp;
}
CTime CTime::operator++()
{
return (*this = *this + 1);
}
CTime CTime::operator--(int)
{
CTime tp(*this);
*this = *this - 1;
return tp;
}
CTime CTime::operator--()
{
return (*this = *this - 1);//需要改變其值
}
CTime CTime::operator+=(CTime &c)
{
return (*this = *this + c);
}
CTime CTime::operator-=(CTime &c)
{
return (*this = *this - c);
}
CTime CTime::operator+=(int s)
{
return (*this = *this + s);
}
CTime CTime::operator-=(int s)
{
return (*this = *this - s);
}
ostream&operator << (ostream&output,CTime&t)
{
output<<t.hour<<":"<<t.minute<<":"<<t.second;
return output;
}
istream&operator >> (istream&input,CTime&t)
{
cout<<"請輸入時分秒:";
input>>t.hour>>t.minute>>t.second;
return input;
}
void main()
{
CTime t1, t2, t;
cin>>t1>>t2;
cout << "t1爲:"<<t1<< endl;
cout << "t2爲:"<<t2<< endl;
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;
//下面自行設計對其他運算符的重載的測試
t = t1 + t2;
cout << "t1+t2="<<t<< endl;
t = t1 - t2;
cout << "t1-t2="<<t<< endl;
cout << "t1後退3600秒。t1+3600=";
t1 = t1 + 3600;
cout << t1<< endl;
cout << "t2前進3600秒。t2-3600=";
t2 = t2 - 3600;
cout << t2<< endl;
cout << "++t1="<<(++t1)<< endl;
cout << "t1="<<t1<< endl;
cout << "--t1="<<(--t1)<< endl;
cout << "t1="<<t1<< endl<< endl;
cout << "t2++="<<(t2++)<< endl;
cout << "t2="<<t2<< endl;
cout << "t2--="<<(t2--)<< endl;
cout << "t2="<<t2<< endl;
cout << "(t1+=t2)=";
t1+=t2;
cout << "t1="<<t1<< endl;
cout << "(t1-=t2)=";
t1-=t2;
cout << "t1="<<t1<< endl;
cout << "t1前進3600秒。(t1-=3600)=";
t1-=3600;
cout << "t1="<<t1<< endl;
cout << "t2後退3600秒。(t2+=3600)=";
t2+=3600;
cout << "t2="<<t2<< endl;
system("PAUSE");
}
運行結果: