●试题八 阅读以下说明和C++程序,将入(n)处的字句写在答题纸的对应栏内。 【说明】 设计一个日期类Date包括年、月、日等私有数据成员。要求实现日期的基本运算,如某日期加上天数、某日期减去天数、两日期相差的天数等。 在Date类中设计如下重载运算符函数: Date operator+(int days):返回某日期加上天数得到的日期。 Date operator-(int days):返回某日期减去天数得到的日期。 int operator-(Date&b):返回两日期相差的天数。 【程序】 #include 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){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 year;) 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$amp } }; 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 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=Ieap(y); while (1) { if(Ip)∥闰年 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$amp cout$amp cout$amp Date dl=now+1000,d2=now-1000; cout$amp cout$amp }