国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C++習題與解析(重載-02)

2019-11-17 05:44:11
字體:
來源:轉載
供稿:網友

05.設計一個日期類Date,包括年、月、日等私有數據成員。要求實現日期的基本運算,如一日期加上天數、一日期減去天數、兩日期相差的天數等。
解:
在Date類中設計如下重載運算符函數:
Date Operator+(int days); 返回一日期加一天數得到的日期
Date operator-(int days); 返回一日期減去天數得到的日期
int operator-(Date &b); 返回兩日期相差的天數
在實現這些重載運算符函數調用以下私有成員函數:
leap(int); 判定指定的年份是否為閏年
dton(Date &); 將指定日期轉換為從0年0月0日起的天數
ntod(int); 將指定的0年0月0日起的天數轉換為對應的日期
本題程序如下:
#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,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 m,int d)
{
year=y;month=m;day=d;
}
void setday(int d){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=dton(*this)+days;
date=ntod(number);
return date;
}
Date operator-(int days)
{
static Date date;
int number=dton(*this);
number-=days;
date=ntod(number);
return date;
}
int operator-(Date &b)
{
int days=dton(*this)-dton(b)-1;
return days;
}
void disp()
{
cout<<year<<"."<<month<<"."<<day<<endl;
}
};
int Date::leap(int year)
{
if(year%4==0&&year%100!=0year%400==0) // 是閏年
return 1;
else // 不是閏年
return 0;
}
int Date::dton(Date &d)
{
int y,m,days=0;
for(y=1;y<=d.year;y++)
if(leap(y))
days+=366;
else
days+=365;
for(m=0;m<d.month-1;m++)
if(leap(d.year))
days+=day_tab[1][m];
else
days+=day_tab[0][m];
days+=d.day;
return days;
}
Date Date::ntod(int n)
{
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--;
lp=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(2002,6,12),then(2003,2,10);
cout<<"now:"; now.disp();
cout<<"then:"; then.disp();
cout<<"相差天數:"<<(then-now)<<endl;
Date d1=now+100,d2=now-100;
cout<<"now+100:"; d1.disp();
cout<<"now-100:"; d2.disp();
}

本程序的執行結果如下:
now:2002.6.12
then:2003.2.10
相差天數:242
now+100:2002.9.20
now-100:2002.3.4


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 监利县| 三亚市| 横峰县| 崇信县| 庆安县| 陇西县| 南郑县| 商洛市| 儋州市| 吕梁市| 新田县| 博乐市| 永胜县| 晋城| 安乡县| 工布江达县| 东辽县| 甘肃省| 旺苍县| 沐川县| 伊宁县| 岑巩县| 雅江县| 宾阳县| 砀山县| 奈曼旗| 循化| 奉贤区| 泾源县| 湖南省| 吉木乃县| 贵港市| 泽州县| 福清市| 台北县| 元朗区| 义马市| 汤阴县| 桓台县| 天台县| 大港区|