阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。 【说明】 设计一个日期类Date包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。 在Date类中设计如下重载运算符函

admin2009-02-15  47

问题 阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。
  【说明】
   设计一个日期类Date包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。
   在Date类中设计如下重载运算符函数:
   Date operator + (int days) : 返回某日期加上天数得到的日期。
   Date operator - (int days) : 返回某日期减去天数得到的日期。
   int operator - (Date&b): 返回两日期相差的天数。
  【程序】
   #include<iostream.h>
   int day tab[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31},
   {31,29,31,30,31,30,31,31,30,31,30,31}};
   //day_tab二维数组存放各月天数,第一行对应非闰年,第二行对应闰年class Date
   {
   int year, month, day        //年,月,日
   int leap(int);           //判断是否闰年
   int dton(Date&)
   Date ntod(int)
   public:
       Date() { }
       Date (int y, int mint d) I year = y; month = m; day = d;}
       void setday(intd){day = d;}
       void setmonth(int m) {month = m;}
       void setyear(int y) {year =y;}
       int getday() {return day;}
       int getmonth() {return month:}
       int getyear() {return yea;}
       Date operator + (int days)            //+运算符重载函数
       {
           static Date date;
           int number =(1)  
           date = ntod(number)
           return date
       }
       Date operator - (int days)            //-运算符重载函数
       {
           staffs Date date;
           int number=(2);  
           number - = days;
           date = ntod(number)
           return date;
       }
       int operator - (Date &b)              //-运算符重载函数
        {
           int days=(3);
           return days;
       }
       void disp()
       {
           cout<<year<<"."<<month<<". "<<day<<endl;
       }
   };
   int Date: :leap( int year)
       if((4))                  //是闰年
           return 1;                       //不是闰年
       else
           return0:
   }
   int Date:: dton( Date &d)         //求从公元0年0月0日到d日期的天数
   {
       inty,m,days =0;
       for(y=1;y<=d. year;y++)
       if((5))days+ =366;         //闰年时加366天
       else days + = 365;               //非闰年时加365天
       for(m =0;m<d. month-1;m++)
       if((6))
       days += day_tab[1] [m];
       else
       days +=day_tab[0] [m];
       days + = d. day;
       return days;
   }
   Date Date::ntod(intn)                    //将从元0年0月0日的天数转换成日期
   {
       int y=1,m = 1,d,rest = n,lp;
       while(1)
       {    if(leap(y))
            if(rest<= 366) break;
            else rest - = 366;
            else                           //非闰年
                if(rest = 365 ) break;
                else rest-=365;
                    y++;
       }
       y--;
       Ip = leap(y);
        while(1)
       {
           if(lp)                //闰年
               if(rest>day_tab[1] [m - 1]) rest -= day_tab[1] [m-1];
               else break;
           else                    //非闰
               if(rest>day_tab[0] [m -1]) rest -= day_tab[0] [m-1];
               else break;
               m++;
       }
       d = rest;
       return Date(y;m,d);
   }
   void main()
   {
       Date now(2003,10,1) ,then(2005,6,5);
       cout<<" now:";now. disp();
       cout<<" then:";then. disp();
       cout<<"相差天数:"<<(then-now)<<endl;
       Date dl = now + 1000,d2 = now - 1000;
       cout<<"now + 1000:" ;d1. disp();
       cout<<" now - 1000:" :d2. disp();
   }

选项

答案(1)dton(*this)+days (2)dton(*this) (3)dton(*this)-(dton(b)-1 (4)year%4 == 0 && year%1O0! = 0‖year%400 =0 (5)leap(y) (6)leap(d.year)

解析 本题程序中对运算符进行重载。其中运算符+表示某日期加上若干天后的日期,第一个“-”表示某日期减去若干天后的日期,第二个“-”表示两日期相差的天数。
   函数leap()判断指定的年份是否为闰年,闰年的条件有两个,一是能被4整除,但不能被100整除,或者既能被100整除,又能被400整除,所以(4)空应填入“year%4=0&&year%1001=0"year%400=0”。
   函数dton()将指定的日期转换成从0年0月0日起的天数,(5)、(6)空用来判断当前的年份是否为闰年,调用函数leap(),所以分别填入“leap(y)”和“leap(d.year)”。函数ntod将指定的0年0月0日起的天数转换成对应的日期。
   “+”运算符重载时,先将当前日期转换为从0年0月0日起的天数,再加上要加的天数,最后将天数再转换成对应的日期。所以(1)空应填入“dton(*this)+days”。
   第—个“-”运算符重载时,先将当前日期转换为从0年0月0日起的天数,再减去要减的天数,最后将天数再转换成对应的日期。而天数的相减由语句“number-=days”完成,所以(2)空应填入“dton(*this)”。
   第二个“-”运算符重载时,先将两个比较的日期都转换为从0年0月 O日起的天数,再相减,所以(3)空应填入“dton(*this)-dton(b)-1”。
转载请注明原文地址:https://jikaoti.com/ti/6vW7FFFM
0

最新回复(0)