#include<iostream.h>
//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);
friend istream& operator >> (istream&, CTime&);//运算符重载为友元函数
friend ostream& operator << (ostream&, 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所规定的时·分·秒后的时间
CTime operator-(CTime &c);
CTime operator+(int s);
CTime operator-(int s);
//一目运算符的重载
CTime operator ++(int);//后置++,下一秒
CTime operator ++();//前置++,下一秒,前置与后置返回值不一样
CTime operator --(int);//后置--,前一秒
CTime operator --();//前置--,前一秒
//赋值运算符的重载
CTime operator +=(CTime &c);
CTime operator -=(CTime &c);
CTime operator +=(int s);
CTime operator -=(int s);
};
istream& operator >> (istream& input, CTime& c)
{
char f1, f2;
while(1)
{
cout << "请输入需要操作的时间(格式:(小时:分钟:秒钟)):";
input >> c.hour >> f1 >> c.minute >> f2 >> c.second;
if(c.hour > 24 || c.hour < 0 || c.minute > 60 || c.minute < 0 || c.second > 60 || c.second < 0 )
{
cout << "输入时间有误!!!"<< endl;
}
else
{
if(f1 != ':' || f2 != ':')
cout << "输入格式有误!!!" << endl;
else
break;
}
}
return input;
}
ostream& operator << (ostream& output, CTime& c)
{
output << c.hour << ":" << c.minute << ":" << c.second <<endl;
return output;
}
CTime::CTime(int h , int m, int s)
{
hour = h;
minute = m;
second = s;
}
bool CTime::operator >(CTime &t)
{
if(hour > t.hour)
{
return true;
}
else
{
if(minute > t.minute)
{
return true;
}
else
{
if(second > t.second)
{
return true;
}
else
{
return false;
}
}
}
}
bool CTime::operator <(CTime &t)
{
if(hour < t.hour)
{
return true;
}
else
{
if(minute < t.minute)
{
return true;
}
else
{
if(second < t.second)
{
return true;
}
else
{
return false;
}
}
}
}
bool CTime::operator >=(CTime &t)//{if(*this < t)return false; else return true;}
{
if(hour < t.hour)
{
return false;
}
else
{
if(minute < t.minute)
{
return false;
}
else
{
if(second < t.second)
{
return false;
}
}
}
}
bool CTime::operator <=(CTime &t)//{if(*this > t)return false; else return true;}
{
if(hour > t.hour)
{
return false;
}
else
{
if(minute > t.minute)
{
return false;
}
else
{
if(second > t.second)
{
return false;
}
}
}
}
bool CTime::operator ==(CTime &t)
{
if(hour != t.hour)
{
return false;
}
else
{
if(minute != t.minute)
{
return false;
}
else
{
if(second != t.second)
{
return false;
}
}
}
}
bool CTime::operator !=(CTime &t)
{
if(hour != t.hour)
{
return true;
}
else
{
if(minute != t.minute)
{
return true;
}
else
{
if(second != t.second)
{
return true;
}
else
{
return false;
}
}
}
}
CTime CTime::operator +(CTime &c)
{
CTime c1;
c1.hour = hour + c.hour;
c1.minute = minute + c.minute;
c1.second = second + c.second;
if(c1.second >= 60)
{
c1.second = c1.second - 60;
c1.minute = c1.minute + 1;
}
if(c1.minute >= 60)
{
c1.minute = c1.minute - 60;
c1.hour = c1.hour + 1;
}
if(c1.hour >= 24)
{
c1.hour = c1.hour -24;
}
return c1;
}
CTime CTime::operator -(CTime &c)
{
CTime c1;
c1.hour = hour - c.hour;
c1.minute = minute - c.minute;
c1.second = second - c.second;
if(c1.second < 0)
{
c1.second = 60 + c1.second;
c1.minute = c1.minute - 1;
}
if(c1.minute < 0)
{
c1.minute =60 + c1.minute;
c1.hour = c1.hour -1;
}
if(c1.hour < 0)
{
c1.hour = 24 + c1.hour;
}
return c1;
}
CTime CTime::operator +(int s)
{
CTime c1;
c1.hour = hour;
c1.minute = minute;
c1.second = second + s;
if(c1.second >= 60)
{
c1.minute = c1.minute + (c1.second / 60);
c1.second = c1.second % 60;
}
if(c1.minute >= 60)
{
c1.hour = c1.hour + (c1.minute / 60);
c1.minute = c1.minute % 60;
}
if(c1.hour >= 24)
{
c1.hour = c1.hour % 24;
}
return c1;
}
CTime CTime::operator -(int s)
{
CTime c1;
c1.hour = hour;
c1.minute = minute;
c1.second = second - s;
if(c1.second < 0)
{
c1.minute = c1.minute - 1 - (-c1.second / 60);
c1.second = 60 + c1.second % 60;
}
if(c1.minute < 0)
{
c1.hour = c1.hour - 1 - (-c1.minute / 60);
c1.minute = 60 + c1.minute % 60;
}
if(c1.hour < 0)
{
c1.hour = 24 + c1.hour;
}
return c1;
}
CTime CTime::operator ++(int)//定义后置自增运算符 "++"重载函数
{
CTime temp(* this);
second ++;
if(second >= 60)
{
second = second -60;
++ minute;
}
if(minute >= 60)
{
minute = minute - 60;
++ hour;
}
if(hour >= 24)
{
hour = hour - 24;
}
return temp;
}
CTime CTime::operator ++()//定义前置自增运算符"++"重载函数
{
if(++ second >= 60)
{
second = second -60;
++ minute;
if(minute >= 60)
{
minute = minute -60;
++ hour;
if(hour >= 24)
{
hour = hour - 24;
}
}
}
return * this;
}
CTime CTime::operator --(int)//定义后置自减运算符 "--"重载函数
{
CTime temp(* this);
second --;
if(second < 0)
{
second = 60 + second;
-- minute;
}
if(minute < 0)
{
minute = 60 + minute;
-- hour;
}
if(hour < 0)
{
hour = 24 + hour;
}
return temp;
}
CTime CTime::operator --()//定义前置自减运算符"--"重载函数{*this = *this -1; return *this;}
{
if(-- second <= 0)
{
second = 60 + second;
-- minute;
}
if(minute < 0)
{
minute = 60 + minute;
-- hour;
}
if(hour < 0)
{
hour = 24 + hour;
}
return * this;
}
CTime CTime::operator +=(CTime &c)//{*this = *this + c;return *this;}
{
hour = hour + c.hour;
minute = minute + c.minute;
second = second + c.second;
if(second >= 60)
{
second = second - 60;
minute = minute + 1;
}
if(minute >= 60)
{
minute = minute - 60;
hour = hour + 1;
}
if(hour >= 24)
{
hour = hour -24;
}
return * this;//从定义前置"++" 来的灵感··int
}
CTime CTime::operator -=(CTime &c)
{
hour = hour - c.hour;
minute = minute - c.minute;
second = second - c.second;
if(second < 0)
{
second = 60 + second;
minute = minute - 1;
}
if(minute < 0)
{
minute =60 + minute;
hour = hour -1;
}
if(hour < 0)
{
hour = 24 + hour;
}
return * this;
}
CTime CTime::operator +=(int s)
{
hour = hour;
minute = minute;
second = second + s;
if(second >= 60)
{
minute = minute + (second / 60);
second = second % 60;
}
if(minute >= 60)
{
hour = hour + (minute / 60);
minute = minute % 60;
}
if(hour >= 24)
{
hour = hour % 24;
}
return * this;
}
CTime CTime::operator -=(int s)
{
hour = hour;
minute = minute;
second = second - s;
if(second < 0)
{
minute = minute - 1 - (-second / 60);
second = 60 + second % 60;
}
if(minute < 0)
{
hour = hour - 1 - (-minute / 60);
minute = 60 + minute % 60;
}
if(hour < 0)
{
hour = 24 + hour;
}
return * this;
}
int main()
{
CTime c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15, c0, c00, c000,c0000;
cout << "1,实现时间与具体秒数的相减" << endl;
cin >> c1;
cout << "c1 = " << c1;
c000 = c1 - 240;
cout << "c1 - 240 = " << c000 ;
cout << "2,实现时间与具体秒数的相加" << endl;
cin >> c2;
cout << "c2 = " << c2;
c0000 = c2 + 234;
cout << "c2 + 234 = " << c0000 ;
cout << "3.实现两时间的各种比较" << endl;
cout << "c1 > c2" << (c1.operator >(c2)?" 成立":" 不成立") << endl;
cout << "c1 >= c2" << (c1.operator >=(c2)?" 成立":" 不成立") << endl;
cout << "c1 == c2" << (c1.operator ==(c2)?" 成立":" 不成立") << endl;
cout << "4.实现两时间的各种比较" << endl;
cin >> c3;
cout << "c3 = " << c3;
cin >> c4;
cout << "c4 = " << c4;
cout << "c3 < c4" << (c3.operator <(c4)?" 成立":" 不成立") << endl;
cout << "c3 <= c4" << (c3.operator <=(c4)?" 成立":" 不成立") << endl;
cout << "c3 != c4" << (c3.operator !=(c4)?" 成立":" 不成立") << endl;
cout << "5.实现两时间的相加减" << endl;
cin >> c5;
cout << "c5 = " << c5;
c0 = c1 + c5;
cout << "c1 + c5 = " << c0 ;
c00 = c1 - c5;
cout << "c1 - c5 = " << c00 ;
cout << "6.实现时间的后置自加运算" << endl;
cin >> c6;
cout << "c6 = " << c6;
c6 ++;
cout << "c6++ = " << c6;
cout << "7.实现时间的前置自加运算" << endl;
cin >> c7;
cout << "c7 = " << c7;
++ c7;
cout << "++c7 = " << c7;
cout << "8.实现时间的后置自减运算" << endl;
cin >> c8;
cout << "c8 = " << c8;
c8 --;
cout << "c8-- = " << c8;
cout << "9.实现时间的前置自减运算" << endl;
cin >> c9;
cout << "c9 = " << c9;
-- c9;
cout << "--c9 = " << c9;
cout << "10.实现时间与时间的+=运算" << endl;
cin >> c10;
cout << "c10 = " << c10;
cin >> c11;
cout << "c11 = " << c11;
c10 += c11;
cout << "(c10 += c11) = " << c10;
cout << "11.实现时间与时间的-=运算" << endl;
cin >> c12;
cout << "c12 = " << c12;
cin >> c13;
cout << "c13 = " << c13;
c12 -= c13;
cout << "(c12 -= c13) = " << c12;
cout << "12.实现时间与具体秒数的+=运算" << endl;
cin >> c14;
cout << "c14 = " << c14;
c14 += 18;
cout<< "(c14 += 18) = " << c14;
cout << "13.实现时间与具体秒数的-=运算" << endl;
cin >> c15;
cout << "c15 = " << c15;
c15 -= 15;
cout << "(c15 -= 15) = " << c15;
//system("pause");
return 0;
}
重点是主函数的改造