当前位置:文档之家› 函数重载习题与解析

函数重载习题与解析

++习题与解析-重载时间:2010-05-19 12:13:47 来源:第二电脑网作者:第二电脑网第二电脑网导读:t<<add(a,b)<<","<<add(c,d)<<endl; } 解:本题说明函数重载的使用方法,这里有两个add()函数,一个add()函数的参数与返回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的。

所以输出为: 10,10 ----------------------------------------------- 02.分析以下程序的执行结果 #include<iostrea...正文:01.分析以下程序执行结果#include<iostream.h>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;cout<<add(a,b)<<","<<add(c,d)<<endl;}解:本题说明函数重载的使用方法,这里有两个add()函数,一个add()函数的参数与返回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的。

所以输出为: 10,10-----------------------------------------------02.分析以下程序的执行结果#include<iostream.h>class Sample{int i;double d;public:void setdata(int n){i=n;}void setdata(double x){d=x;}void disp(){cout<<"i="<<i<<",d="<<d<<endl;}};void main(){Sample s;s.setdata(10);s.setdata(15.6);s.disp();}解:本题说明重载成员函数的使用方法。

setdata()成员函数有两个,根据其参数类型加以区分。

所以输出为:i=10, d=15.6-----------------------------------------------03.分析以下程序的执行结果#include<iostream.h>class Sample{int n;public:Sample(){}Sample(int i){n=i;}Sample &operator =(Sample);void disp(){cout<<"n="<<n<<endl;}};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<iostream.h>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<<")"<<endl;}};Point::Point(Point &p){x=p.x; y=p.y;}void Point::offset(int i,int j){x+=i; y+=j;}void Point::offset(Point p){x+=p.getx(); y+=p.gety();}bool Point::operator==(Point p){if(x==p.getx()&&y==p.gety())return 1;elsereturn 0;}bool Point::operator!=(Point p){if(x!=p.getx()||y!=p.gety())return 1;elsereturn 0;}void Point::operator+=(Point p){x+=p.getx(); y+=p.gety();}void Point::operator-=(Point p){x-=p.getx(); y-=p.gety();}Point Point::operator+(Point p){this->x+=p.x; this->y+=p.y;return *this;}Point Point::operator-(Point p){this->x-=p.x;this->y-=p.y;return *this;}void main(){Point p1(2,3),p2(3,4),p3(p2);cout<<"1:"; p3.disp();p3.offset(10,10);cout<<"2:"; p3.disp();cout<<"3:"<<(p2==p3)<<endl;cout<<"4:"<<(p2!=p3)<<endl;p3+=p1;cout<<"5:"; p3.disp();p3-=p2;cout<<"6:"; p3.disp();p3=p1+p3; // 先将p1+p3的结果放在p1中,然后赋给p3,所以p1=p3 cout<<"7:"; p3.disp();p3=p1-p2;cout<<"8:"; p3.disp();}本程序的执行结果如下:来源:/master/College/Language/VC/2010-05-19/14206第二电脑网导读:t<<add(a,b)<<","<<add(c,d)<<endl; } 解:本题说明函数重载的使用方法,这里有两个add()函数,一个add()函数的参数与返回值为int型,另一个的参数与返回值为double型,它们是根据参数类型自动区分的。

所以输出为: 10,10 ----------------------------------------------- 02.分析以下程序的执行结果 #include<iostrea...正文:1:(3,4)2:(13,14)3:04:15:(15,17)6:(12,13)7:(14,16)8:(11,12)----------------------------------------------------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;elsedays+=365;for(m=0;m<d.month-1;m++) if(leap(d.year))days+=day_tab[1][m]; elsedays+=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;elserest-=366;}else{if(rest<=365)break;elserest-=365;}y++;}y--;lp=leap(y);while(1){if(lp){if(rest>day_tab[1][m-1])rest-=day_tab[1][m-1];elsebreak;}else{if(rest>day_tab[0][m-1])rest-=day_tab[0][m-1];elsebreak;}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.12then:2003.2.10相差天数:242now+100:2002.9.20now-100:2002.3.4题1.分析以下程序的执行结果#include<iostream.h>int add(int x,int y){return x+y;}int add(int x,int y,int z){return x+y+z;}void main(){int a=4,b=6,c=10;cout<<add(a,b)<<","<<add(a,b,c)<<endl;}解:本题说明重载函数的使用方法。

相关主题