C++实验3成员函数的重载.docx
《C++实验3成员函数的重载.docx》由会员分享,可在线阅读,更多相关《C++实验3成员函数的重载.docx(13页珍藏版)》请在冰豆网上搜索。
![C++实验3成员函数的重载.docx](https://file1.bdocx.com/fileroot1/2023-1/3/3a59ffa6-62b2-44a2-ab03-05a9717c1b8e/3a59ffa6-62b2-44a2-ab03-05a9717c1b8e1.gif)
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(nElemList[nElem++]=elem;
returnnElem;
}
else{
int*list;
list=newint[nMax+1];
for(inti=0;idelete[nMax]List;
nMax++;
List=list;
List[nElem++]=elem;
returnnElem;
}
}
voidListClass:
:
Print(void)
{
for(inti=0;icout<<'\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.nElenTF
int*list;list=newint[nMax+1];
intj=0;elme<=i
jlist[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