您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  C++习题与解析(重载-02) 【注册男护士专用博客】          

C++习题与解析(重载-02)

www.nanhushi.com     佚名   不详 

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!=0||year%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 


 

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。