附件是类的设计要求。有空的帮看看有没有什么问题或者可以优化的地方啊~~ 万分感谢!!!
//自己设计的一个Date类
第10章 大作业.zip
(57.21 KB)
class Date
{
public:
int dm(); //返回每月的最大天数
Date(int,int,int); //构造函数
void set(int,int,int); //设置日期值
void get(int &,int &,int &); //传递日期的值
void show(); //输出年月日
Date operator -(int &); //重载-
Date operator +(int &); //重载+
int operator -(Date &); //重载-,实现计算日期间的天数
Date operator ++(); //重载++
Date operator --(); //重载——
Date operator ++(int); //重载++(后置)
Date operator --(int); //重载--(后置)
friend ostream & operator <<(ostream &,Date &);
friend istream & operator >>(istream &,Date &); //重载流运算符
friend bool operator >=(Date &,Date &);
friend bool operator <=(Date &,Date &);
friend bool operator ==(Date &,Date &);
friend bool operator >(Date &,Date &);
friend bool operator <(Date &,Date &);
friend bool operator !=(Date &,Date &); //重载六个比较运算符
bool islegal(); //定义检测日期是否合法的函数,并进行修正
private:
int yy;
int mm;
int dd;
};
int Date::dm()
{
int dmax;
if(mm==1||mm==3||mm==5||mm==7||mm==8||mm==10||mm==12)
dmax =31;
else if(mm!=2)
dmax =30;
else if((yy%4==0&&yy%100!=0)||(yy%400==0))
dmax =29;
else dmax =28;
return dmax;
}
Date::Date(int y=2000,int m=1,int d=1)
{yy=y;mm=m;dd=d;(*this).islegal();}
void Date::set(int y,int m=1,int d=1)
{if(y) yy=y;if(m) mm=m;if(d) dd=d;(*this).islegal();}
void Date::get(int &y,int &m,int &d)
{
y=yy;m=mm;d=dd;
}
void Date::show()
{
cout<<yy<<"年"<<mm<<"月"<<dd<<"日"<<endl;
}
Date Date::operator -(int & n)
{
int i;Date temp(* this);
for(i=0;i<n;i++)
{--temp;}
return temp;
}
Date Date::operator +(int & n)
{
int i;Date temp(* this);
for(i=0;i<n;i++)
{++temp;}
return temp;
}
int Date::operator -(Date &d1)
{
int i=0;Date temp(* this);
while(temp != d1)
{--temp;
i++;}
return i;
}
Date Date::operator ++()
{
if(++dd>(*this).dm())
{dd=1;++mm;}
if(mm>12)
{mm=1;++yy;}
return *this;
}
Date Date::operator --()
{
if(--dd<=0)
{
--mm;
if(mm<=0)
{mm=12;--yy;}
dd=(*this).dm();
}
return *this;
}
Date Date::operator ++(int)
{
Date temp(*this);++dd;
if(dd>=(*this).dm())
{
dd=1;++mm;
}
if(mm>12)
{
mm=1;++yy;
}
return temp;
}
Date Date::operator --(int)
{
Date temp(*this);--dd;
if(dd<=0)
{
--mm;
if(mm<=0)
{
mm=12;--yy;
}
dd=(*this).dm();
}
return temp;
}
ostream & operator <<(ostream &output,Date & d)
{
output<<d.yy<<"年"<<d.mm<<"月"<<d.dd<<"日"<<endl;
return output;
}
istream & operator >>(istream &input,Date & d)
{
input>>d.yy>>d.mm>>d.dd;
if(!d.islegal())
cout <<"警告:输入参数非法,非法参数已被替换!"<<endl;
return input;
}
bool operator >=(Date &d1,Date &d2)
{
if(d1.yy>d2.yy)
return true;
else if(d1.mm>d2.mm)
return true;
else if(d1.dd>=d2.dd)
return true;
else
return false;
}
bool operator <=(Date &d1,Date &d2)
{
if(d1.yy<d2.yy)
return true;
else if(d1.mm<d2.mm)
return true;
else if(d1.dd<=d2.dd)
return true;
else
return false;
}
bool operator ==(Date &d1,Date &d2)
{
if(d1.yy==d2.yy&&d1.mm==d2.mm&&d1.dd==d2.dd)
return true;
else
return false;
}
bool operator >(Date &d1,Date &d2)
{
if(d1.yy>d2.yy)
return true;
else if(d1.mm>d2.mm)
return true;
else if(d1.dd>d2.dd)
return true;
else
return false;
}
bool operator <(Date &d1,Date &d2)
{
if(d1.yy<d2.yy)
return true;
else if(d1.mm<d2.mm)
return true;
else if(d1.dd<d2.dd)
return true;
else
return false;
}
bool operator !=(Date &d1,Date &d2)
{
if(d1.yy==d2.yy&&d1.mm==d2.mm&&d1.dd==d2.dd)
return false;
else
return true;
}
bool Date::islegal()
{
bool bo=true;
if (yy<1900||yy>2099)
{yy = 2000;bo=false;}
if (mm<1||mm>12)
{mm=1;bo=false;}
if (dd<1||dd>(*this).dm())
{dd=1;bo=false;}
return bo;
}
附件是类的设计要求。有空的帮看看有没有什么问题或者可以优化的地方啊~~ 万分感谢!!!
[ 本帖最后由 bevin 于 2011-6-7 15:31 编辑 ]