资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
.01.分析以下程序执行结果 #include int add(int x,int y) return x+y; double add(double x,double y) return x+y; void main() int a=4,b=6; double c=2.6,d=7.4; coutadd(a,b),add(c,d)endl; 解: 本题说明函数重载的使用方法, 这里有两个add()函数,一个add()函数的参数与返回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的。 所以输出为: 10,10 - 02.分析以下程序的执行结果 #include class Sample int i; double d; public: void setdata(int n)i=n; void setdata(double x)d=x; void disp() couti=i,d=dendl; ; void main() Sample s; s.setdata(10); s.setdata(15.6); s.disp(); 解: 本题说明重载成员函数的使用方法。setdata()成员函数有两个,根据其参数类型加以区分。 所以输出为:i=10, d=15.6 - 03.分析以下程序的执行结果 #include class Sample int n; public: Sample() Sample(int i)n=i; Sample &operator =(Sample); void disp()coutn=nendl; ; Sample &Sample:operator=(Sample s) Sample:n=s.n; return *this; void main() Sample s1(10),s2; s2=s1; s2.disp(); 解: 本题说明重载运算符(=)的使用方法。operator=成员函数实现两个对象的赋值。 所以输出为: n=10 - 04.设计一个点类Point,实现点对象之间的各种运算。 解: Point类提供了6个运算符重载函数(参加程序中的代码和注释),以实现相应的运算。 本题程序如下: #include class Point int x,y; public: Point()x=y=0; Point(int i,int j)x=i;y=j; Point(Point &); Point() void offset(int,int); / 提供对点的偏移 void offset(Point); / 重载,偏移量用Point类对象表示 bool operator=(Point); / 运算符重载,判断两个对象是否相同 bool operator!=(Point); / 运算符重载,判断两个对象是否不相同 void operator+=(Point); / 运算符重载,将两个点对象相加 void operator-=(Point); / 运算符重载,将两个点对象相减 Point operator+(Point ); / 运 算符重 载,相加并将结果放在左操作数中 Point operator-(Point); / 运算符重载,相减并将结果放在左操作数中 int getx()return x; int gety()return y; void disp() cout(x,y)x+=p.x; this-y+=p.y; return *this; 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 int day_tab212=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() coutyear.month.dayendl; ; 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;md.month-1;m+) if(leap(d.year) days+=day_tab1m; else days+=day_tab0m; 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(restday_tab1m-1) rest-=day_tab1m-1; else break; else if(restday_tab0m-1) rest-=day_tab0m-1; else break; m+; d=rest; return Date(y,m,d); void main() Date now(2002,6,12),then(2003,2,10); coutnow:; now.disp(); coutthen:; then.disp(); cout相差天数:(then-now)endl; Date d1=now+100,d2=now-100; coutnow+100:; d1.disp(); coutnow-100:; d2.disp(); 本程序的执行结果如下: now:2002.6.12 then:2003.2.10 相差天数:242 now+100
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号