C++实验3成员函数的重载.docx

上传人:b****6 文档编号:6121560 上传时间:2023-01-04 格式:DOCX 页数:13 大小:152.47KB
下载 相关 举报
C++实验3成员函数的重载.docx_第1页
第1页 / 共13页
C++实验3成员函数的重载.docx_第2页
第2页 / 共13页
C++实验3成员函数的重载.docx_第3页
第3页 / 共13页
C++实验3成员函数的重载.docx_第4页
第4页 / 共13页
C++实验3成员函数的重载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

C++实验3成员函数的重载.docx

《C++实验3成员函数的重载.docx》由会员分享,可在线阅读,更多相关《C++实验3成员函数的重载.docx(13页珍藏版)》请在冰豆网上搜索。

C++实验3成员函数的重载.docx

C++实验3成员函数的重载

实验3成员函数的重载

1.实验目的及要求:

1)掌握普通函数重载的方法;

2)掌握成员函数重载的方法;

2.实验内容:

2.1分析下面的程序,指出程序运行的结果:

classListClass

{

int*List;

unsignednMax;

unsignednElem;

public:

voidInit(intn=10)

{

List=newint[n];

nMax=n;

nElem=0;

}

intElem(int);

int&Elem(unsignedn){returnList[n];}

unsignedElem(void){returnnElem;}

unsignedMax(void){returnnMax;}

voidPrint(void);

intGetElem(inti)

{

if((i>=0)&&(i<=nElem))returnList[i];

elsereturn0;

}

voidDestroy(void){delete[nMax]List;}

};

intListClass:

:

Elem(intelem)

{

if(nElem

List[nElem++]=elem;

returnnElem;

}

else{

int*list;

list=newint[nMax+1];

for(inti=0;i

delete[nMax]List;

nMax++;

List=list;

List[nElem++]=elem;

returnnElem;

}

}

voidListClass:

:

Print(void)

{

for(inti=0;i

cout<<'\n';

}

voidmain(void)

{ListClasslist,list1;

list.Init(10);

list1.Init(20);

for(inti=0;i<10;i++)

list1.Elem(i);

cout<<"线性表list的元素的个数为:

"<

cout<<"线性表list长度为:

"<

cout<<"线性表list1的元素的个数为:

:

"<

cout<<"线性表list1长度为:

"<

list1.Print();

list1.Elem(3u)=100;

cout<<"现在线性表list1中的第三个值为:

"<

list1.Elem(20);

list1.Elem(200);

cout<<"现在线性表list1中元素的个数为:

"<

list1.Print();

cout<<"现在线性表list1中的最后一个元素为:

"<

list.Destroy();

list1.Destroy();

}

分析:

ListClass

-*List:

int

-nMax:

unsigned

-nElem:

unsigned

+Init(intn=10):

void

+Elem(int):

int

+&Elem(unsigned):

int

+Elem(void):

unsigned

+Max(void):

unsigned

+print(void):

void

+GetElem(int):

int

+Destroy(void):

void

程序执行过程如下:

由于接下来的都是对Elem和Print的调用,所以不做分析了

创建ListClass类的两个对象list和list1

list.List<=int[10],nMax<=10;nElem<=0

List1.List<=int[20],nMax<=20;nElem<=0

inti<=0

i<10

list1.nElen

TF

int*list;list=newint[nMax+1];

intj=0;elme<=i

j

list[j]=list1.List[j];

j++;

delete[nMax]list.List;

list1.nMax++;list1.List=list;

list1.List[list1.nElem++]=elem;

returnlist1.nElem;

elem<=i

list1.List[nElem++]<=elem;

returnnElem;

 

i++;

输出线性表list的元素的个数list.nElem=0

输出线性表list长度list.nMax=10

输出线性表list1的元素的个数list1.nElem=10

输出线性表list1长度list1.nMax=20

inti<=0

i

.

输出list.List[i]

i++

…………………………………………

程序运行情况和结果如下:

3.2编写并调试程序:

1)使用函数重载的方法定义两个重名函数,分别求出整型数的两点间距离和实型数的两点间距离。

2)定义一个Cpoint类,用成员函数的重载实现上题的功能。

并编写主函数测试。

3)使用重载的方法编写一个求整数、实数和双精度数的平方数的类。

并用一个主函数进行测试。

Square

-x:

int

-y:

flaot

-z:

double

+Square(int):

int

+Square(float):

float

+Square(double):

double

Cpoint

-distance:

float

+Cpoint(int,int):

foat

+Cpoint(float,foat):

foat

 

代码实现如下:

#include

#include

classCpoint{

private:

doubledistance;

public:

Cpoint(intx1,inty1,intx2,inty2)

{

distance=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

cout<<"整型数distance="<

}

Cpoint(floatx1,floaty1,floatx2,floaty2)

{

distance=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

cout<<"实数distance="<

}

};

classSquare{

doubles;

public:

Square(inti){s=i*i;cout<<"实数平方数为"<

Square(floati){s=i*i;cout<<"单精度平方数为"<

Square(doublei){s=i*i;cout<<"双精度平方数为"<

};

voidmain()

{

Cpointdistance1(0,0,3,4);

Cpointdistance2(0.0f,0.0f,3.0f,4.0f);

Square(9);

Square(5.0f);

Square(4.0);

}

程序实现分析:

1.一开始的时候开始调试Cpoint类的时候出现了以下问题:

解决方案如下:

这个时候的结果为:

2.经过修改和添加另外一个类后,得最终的设计代码

结果如下:

*4课后练习

调试下面的程序,指出程序实现的功能及程序输出结果;进一步理解函数重载及成员函数重载的实现。

1)调试程序1

#include

intAbs(intx)

{//

cout<<"调用函数Abs(int)。

"<<'\n';

returnx>=0?

x:

-x;

}

doubleAbs(doublex)

{//B

cout<<"调用函数Abs(double)。

"<<'\n';

returnx>=0?

x:

-x;

}

voidmain()

{cout<<"-20的绝对值是:

"<

cout<<"-111.11的绝对值是:

"<

}

功能分析:

程序通过两个同函数名但参数类型不同的两个函数分别实现对整型和实数型的取绝对值功能。

输出结果:

2)调试程序2

#include

intmax(inta,intb);

intmax(inta,intb,intc);

intmax(inta,intb,intc,intd);

voidmain()

{

cout<

cout<

cout<

}

intmax(inta,intb)

{returna>b?

a:

b;}

intmax(inta,intb,intc)

{

intt=max(a,b);

returnmax(t,c);

}

intmax(inta,intb,intc,intd)

{

intt1=max(a,b);

intt2=max(c,d);

returnmax(t1,t2);

}

功能分析:

程序通过两个同函数名但参数个数不同的三个函数分别实现对两个整数,三个整数,四个整数的求最大值功能

运行结果如下:

3)调试程序3

#include

classCAdd

{

public:

intAdd(inta,intb)//A

{returna+b;}

doubleAdd(doublex,doubley)//B

{returnx+y;}

};

intAdd(inta,intb)

{returna+b;}//C

voidmain()

{

CAddc;

cout<<"5+3="<

cout<<"3.5+6.1="<

cout<<"5+10="<

}

功能分析:

通过类的成员函数分别对整数和实数实现求和功能,另外,也可以通过子函数来实现求和功能

Add

Add(a:

int,b:

int):

int

Add(x:

double,y:

double):

double

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1