| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 239 人关注过本帖
标题:附件是类的设计要求。有空的帮看看有没有什么问题或者可以优化的地方啊~~ ...
只看楼主 加入收藏
bevin
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-6-5
收藏
 问题点数:0 回复次数:0 
附件是类的设计要求。有空的帮看看有没有什么问题或者可以优化的地方啊~~ 万分感谢!!!
//自己设计的一个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 编辑 ]
2011-06-07 12:12
快速回复:附件是类的设计要求。有空的帮看看有没有什么问题或者可以优化的地方啊 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039215 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved