宜昌网站推广/湛江seo
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:定义Time类中的<<和>>运算符重载,实现时间的输入输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
* 作 者: 雷恒鑫
* 完成日期: 2012 年 04 月 14 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
#include <iostream.h> 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); //比较运算符(二目)的重载 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 ostream& operator << (ostream&,CTime&);//重载流提取运算符“>>”friend istream& operator >> (istream&,CTime&);
};
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;
} */
//下面实现所有的运算符重载代码。
//为简化编程,请注意通过调用已有函数,利用好各函数之间的关系
//比较运算符(二目)的重载
ostream& operator << (ostream&output,CTime&c)
{ output<<c.hour <<":"<<c.minute <<":"<<c.second <<endl; return output;
}
istream& operator >> (istream& input,CTime & c)
{ input>>c.hour>>c.minute>>c.second;return input;
}bool CTime::operator > (CTime &t)
{ 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)
{ 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 if(second>t.second ) return false; return false;
}
bool CTime::operator >= (CTime &t)
{ CTime t1; t1.hour =hour; t1.minute =minute ; t1.second =second ; if (t1<t) return false; return true;
}
bool CTime::operator <= (CTime &t)
{ CTime t1; t1.hour =hour; t1.minute =minute ; t1.second =second ; if (t1>t) return false; return true;
}
bool CTime::operator == (CTime &t)
{ CTime t1; t1.hour =hour; t1.minute =minute ; t1.second =second ; if (t1>t) return false; if (t1<t) return false; return true;
} bool CTime::operator != (CTime &t)
{ CTime t1; t1.hour =hour; t1.minute =minute ; t1.second =second ; if(t1==t) return false; return true;
}
//二目运算符的重载
CTime CTime::operator+(CTime &c)//返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15
{ CTime c2; int time; time = (hour * 3600 + minute * 60 + second) + (c.hour * 3600 + c.minute * 60 + c.second); c2.hour = time / 3600; time = time % 3600; c2.minute = time / 60; time = time % 60; c2.second = time; return c2;
}
CTime CTime::operator-(CTime &c)//对照+理解
{ CTime c2; int time; time = (hour * 3600 + minute * 60 + second) - (c.hour * 3600 + c.minute * 60 + c.second); c2.hour = time / 3600; time = time % 3600; c2.minute = time / 60; time = time % 60; c2.second = time; return c2;
}
CTime CTime::operator+(int s)//返回s秒后的时间
{ int time = hour * 3600 + minute * 60 + second + s; hour = time / 3600; time = time % 3600; minute = time / 60; time = time % 60; second = time; return (*this);
}
CTime CTime::operator-(int s)//返回s秒前的时间
{ int time = hour * 3600 + minute * 60 + second; time = time - s; hour = time / 3600; time = time % 3600; minute = time / 60; time = time % 60; second = time; return (*this); }
//一目运算符的重载
CTime CTime::operator++(int)//后置++,下一秒
{ CTime temp(*this); second++; if(second>=60) { second-=60; ++minute; } return temp;
}
CTime CTime::operator++()//前置++,下一秒
{ if(++second>=60) { second-=60; ++minute; } return *this;
}
CTime CTime::operator--(int)//后置--,前一秒
{ CTime temp(*this); second--; if(second<0) { second=59; --minute; } return temp;
}
CTime CTime::operator--()//前置--,前一秒
{ if(--second<0) { second=59; --minute; } return *this;
}
//赋值运算符的重载
CTime CTime::operator+=(CTime &c)
{ CTime t1,t; t1.hour =hour; t1.minute =minute ; t1.second =second ; t=t1+c; hour=t.hour ; minute=t.minute ; second=t.second ; return t;
}
CTime CTime::operator-=(CTime &c)
{ *this=*this-c; return *this; }
CTime CTime::operator+=(int s)//返回s秒后的时间
{ CTime t1,t; t1.hour =hour; t1.minute =minute ; t1.second =second ; t=t1+s; hour=t.hour ; minute=t.minute ; second=t.second ; return t;
}
CTime CTime::operator-=(int s)//返回s秒前的时间
{ *this=*this-s; return *this;
}
void main()
{ CTime t1(8,20,25),t2(11,20,50),t; int n; cout<<"请输入t1的时间:(以aa bb cc的格式输入)";cin>>t1;cout<<"请输入t2的时间:(以aa bb cc的格式输入)";cin>>t2;cout<<"t1为:"; cout<<t1; cout<<"t2为:"; cout<<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+t2的时间为:"; t=t1+t2; cout<<t; cout<<"t2-t1的时间为:"; t=t2-t1; cout<<t; cout<<endl; cout<<"请输入您想增加的秒数:"; cin>>n; t=t1+n; cout<<"增加"<<n<<"秒后的时间为:"; cout<<t; t=t1-n; cout<<"增加"<<n<<"秒前的时间为:"; cout<<t; cout<<endl; cout<<"对t1后置++,结果为:"; t=t1++; cout<<t; cout<<"运算结束后,t1的值为:"; cout<<t1; cout<<endl; cout<<"对t1前置++,结果为:"; t=++t1; cout<<t; cout<<"运算结束后,t1的值为:"; cout<<t1; cout<<endl; cout<<"对t1后置--,结果为:"; t=t1--; cout<<t; cout<<"运算结束后,t1的值为:"; cout<<t1; cout<<endl; cout<<"对t1前置--,结果为:"; t=--t1; cout<<t; cout<<"运算结束后,t1的值为:"; cout<<t1; cout<<endl; cout<<"运算t1+=t2的结果为:"; t1+=t2; cout<<t1; cout<<endl; cout<<"此时t1的值为:"; cout<<t1; cout<<"此时t2的值为:"; cout<<t2; cout<<endl; cout<<"运算t1-=t2的结果为:"; t1-=t2; cout<<t1; cout<<"此时t1的值为:"; cout<<t1; cout<<"此时t2的值为:"; cout<<t2; cout<<endl; cout<<"请输入您想增加的秒数:"; cin>>n; t1+=n; cout<<"t1增加"<<n<<"秒后的时间为:"; cout<<t1; cout<<"t2增加"<<n<<"秒前的时间为:"; t2-=n; cout<<t2; cout<<endl;
}
运行结果:
经验积累:
1.用友元函数的时候,VS2008好啊。
下面是改进后的程序:
#include <iostream.h> class CTime
{
private: unsigned short int hour; // 时 unsigned short int minute; // 分 unsigned short int second; // 秒 char unknown; //':'的符号public: CTime(int h=0,int m=0,int s=0); // void setTime(int h,int m,int s); //比较运算符(二目)的重载 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 ostream& operator << (ostream&,CTime&);//重载流提取运算符“>>”friend istream& operator >> (istream&,CTime&);
};
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;
} */
//下面实现所有的运算符重载代码。
//为简化编程,请注意通过调用已有函数,利用好各函数之间的关系
//比较运算符(二目)的重载
ostream& operator << (ostream&output,CTime&c)
{ output<<c.hour <<":"<<c.minute <<":"<<c.second <<endl; return output;
}
istream& operator >> (istream& input,CTime & c)
{ input>>c.hour>>c.unknown >>c.minute>>c.unknown >>c.second;return input;
}bool CTime::operator > (CTime &t)
{ 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)
{ 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 if(second>t.second ) return false; return false;
}
bool CTime::operator >= (CTime &t)
{ CTime t1; t1.hour =hour; t1.minute =minute ; t1.second =second ; if (t1<t) return false; return true;
}
bool CTime::operator <= (CTime &t)
{ CTime t1; t1.hour =hour; t1.minute =minute ; t1.second =second ; if (t1>t) return false; return true;
}
bool CTime::operator == (CTime &t)
{ CTime t1; t1.hour =hour; t1.minute =minute ; t1.second =second ; if (t1>t) return false; if (t1<t) return false; return true;
} bool CTime::operator != (CTime &t)
{ CTime t1; t1.hour =hour; t1.minute =minute ; t1.second =second ; if(t1==t) return false; return true;
}
//二目运算符的重载
CTime CTime::operator+(CTime &c)//返回c所规定的时、分、秒后的时间,例t1(8,20,25),t2(11,20,50),t1+t2为:41:15
{ CTime c2; int time; time = (hour * 3600 + minute * 60 + second) + (c.hour * 3600 + c.minute * 60 + c.second); c2.hour = time / 3600; time = time % 3600; c2.minute = time / 60; time = time % 60; c2.second = time; return c2;
}
CTime CTime::operator-(CTime &c)//对照+理解
{ CTime c2; int time; time = (hour * 3600 + minute * 60 + second) - (c.hour * 3600 + c.minute * 60 + c.second); c2.hour = time / 3600; time = time % 3600; c2.minute = time / 60; time = time % 60; c2.second = time; return c2;
}
CTime CTime::operator+(int s)//返回s秒后的时间
{ int time = hour * 3600 + minute * 60 + second + s; hour = time / 3600; time = time % 3600; minute = time / 60; time = time % 60; second = time; return (*this);
}
CTime CTime::operator-(int s)//返回s秒前的时间
{ int time = hour * 3600 + minute * 60 + second; time = time - s; hour = time / 3600; time = time % 3600; minute = time / 60; time = time % 60; second = time; return (*this); }
//一目运算符的重载
CTime CTime::operator++(int)//后置++,下一秒
{ CTime temp(*this); second++; if(second>=60) { second-=60; ++minute; } return temp;
}
CTime CTime::operator++()//前置++,下一秒
{ if(++second>=60) { second-=60; ++minute; } return *this;
}
CTime CTime::operator--(int)//后置--,前一秒
{ CTime temp(*this); second--; if(second<0) { second=59; --minute; } return temp;
}
CTime CTime::operator--()//前置--,前一秒
{ if(--second<0) { second=59; --minute; } return *this;
}
//赋值运算符的重载
CTime CTime::operator+=(CTime &c)
{ CTime t1,t; t1.hour =hour; t1.minute =minute ; t1.second =second ; t=t1+c; hour=t.hour ; minute=t.minute ; second=t.second ; return t;
}
CTime CTime::operator-=(CTime &c)
{ *this=*this-c; return *this; }
CTime CTime::operator+=(int s)//返回s秒后的时间
{ CTime t1,t; t1.hour =hour; t1.minute =minute ; t1.second =second ; t=t1+s; hour=t.hour ; minute=t.minute ; second=t.second ; return t;
}
CTime CTime::operator-=(int s)//返回s秒前的时间
{ *this=*this-s; return *this;
}
void main()
{ CTime t1,t2,t; int n; cout<<"请输入t1的时间:(以aa:bb:cc的格式输入)";cin>>t1;cout<<"请输入t2的时间:(以aa:bb:cc的格式输入)";cin>>t2;cout<<"t1为:"; cout<<t1; cout<<"t2为:"; cout<<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+t2的时间为:"; t=t1+t2; cout<<t; cout<<"t2-t1的时间为:"; t=t2-t1; cout<<t; cout<<endl; cout<<"请输入您想增加的秒数:"; cin>>n; t=t1+n; cout<<"增加"<<n<<"秒后的时间为:"; cout<<t; t=t1-n; cout<<"增加"<<n<<"秒前的时间为:"; cout<<t; cout<<endl; cout<<"对t1后置++,结果为:"; t=t1++; cout<<t; cout<<"运算结束后,t1的值为:"; cout<<t1; cout<<endl; cout<<"对t1前置++,结果为:"; t=++t1; cout<<t; cout<<"运算结束后,t1的值为:"; cout<<t1; cout<<endl; cout<<"对t1后置--,结果为:"; t=t1--; cout<<t; cout<<"运算结束后,t1的值为:"; cout<<t1; cout<<endl; cout<<"对t1前置--,结果为:"; t=--t1; cout<<t; cout<<"运算结束后,t1的值为:"; cout<<t1; cout<<endl; cout<<"运算t1+=t2的结果为:"; t1+=t2; cout<<t1; cout<<endl; cout<<"此时t1的值为:"; cout<<t1; cout<<"此时t2的值为:"; cout<<t2; cout<<endl; cout<<"运算t1-=t2的结果为:"; t1-=t2; cout<<t1; cout<<"此时t1的值为:"; cout<<t1; cout<<"此时t2的值为:"; cout<<t2; cout<<endl; cout<<"请输入您想增加的秒数:"; cin>>n; t1+=n; cout<<"t1增加"<<n<<"秒后的时间为:"; cout<<t1; cout<<"t2增加"<<n<<"秒前的时间为:"; t2-=n; cout<<t2; cout<<endl;
}
运行结果: