1、C+实验3成员函数的重载实验3 成员函数的重载1实验目的及要求:1)掌握普通函数重载的方法;2)掌握成员函数重载的方法;2实验内容:21分析下面的程序,指出程序运行的结果: class ListClass int *List ; unsigned nMax ; unsigned nElem ; public: void Init (int n=10) List=new int n ; nMax=n ; nElem=0 ; int Elem(int); int &Elem(unsigned n)return List n ; unsigned Elem(void) return nElem ;
2、unsigned Max (void)return nMax ; void Print (void) ; int GetElem(int i) if(i=0)&(i=nElem)return List i ; else return 0; void Destroy (void) delete nMaxList ; ;int ListClass :Elem(int elem) if(nElemnMax) ListnElem+=elem; return nElem ; else int*list ; list=new int nMax+1; for(int i=0 ; inElem ; i+) l
3、ist i=Listi ; delete nMaxList ; nMax+ ; List=list; ListnElem+=elem ; return nElem ; void ListClass :Print(void) for(int i=0 ;inElem ; i+) cout Listit; coutn;void main (void ) ListClass list ,list1; list.Init(10); list1.Init(20); for (int i=0 ; i10 ; i+) list1.Elem(i) ; cout线性表list的元素的个数为:list.Elem()
4、n ; cout线性表list长度为:list.Max()n ; cout线性表list1的元素的个数为:list1.Elem()n ; cout线性表list1长度为:list1.Max()n; list1.Print(); list1.Elem(3u)=100 ; cout现在线性表list1中的第三个值为:list1.Elem(3u)n ; list1.Elem(20); list1.Elem (200); cout现在线性表list1中元素的个数为:list1.Elem()n ; list1.Print();cout现在线性表list1中的最后一个元素为:list1.GetElem(l
5、ist1.Elem()-1)n ; list.Destroy(); list1.Destroy();分析:ListClass-*List:int-nMax:unsigned-nElem:unsigned+Init(int n=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类的两
6、个对象list和list1list.List=int 10 , nMax=10; nElem=0List1.List=int 20 , nMax=20; nElem=0int i=0i10 list1.nElenlist1.nMax T Fint*list ;list=new int nMax+1;int j=0 ; elme=ijlist1.nElem ;list j=list1.Listj ; j+;delete nMaxlist.List ; list1.nMax+; list1.List=list; list1.Listlist1.nElem+=elem ;return list1.n
7、Elem ; elem=i list1.ListnElem+=elem; return nElem; i+;输出线性表list的元素的个数list.nElem=0输出线性表list长度list.nMax=10输出线性表list1的元素的个数 list1.nElem=10输出线性表list1长度 list1.nMax=20int i=0ilist1.nElem. 输出list.Listi i+程序运行情况和结果如下:32 编写并调试程序: 1) 使用函数重载的方法定义两个重名函数,分别求出整型数的两点间距离和实型数的两点间距离。2)定义一个Cpoint类,用成员函数的重载实现上题的功能。并编写主
8、函数测试。3) 使用重载的方法编写一个求整数、实数和双精度数的平方数的类。并用一个主函数进行测试。Square-x:int-y:flaot-z:double+Square(int):int+Square(float):float+Square(double):doubleCpoint-distance:float+Cpoint(int,int):foat+Cpoint(float,foat):foat代码实现如下:#include #include class Cpointprivate: double distance;public: Cpoint(int x1,int y1,int x2,
9、int y2) distance=sqrt(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1); cout整型数distance=distanceendl; Cpoint(float x1,float y1,float x2,float y2) distance=sqrt(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1); cout实数distance=distanceendl; ;class Square double s;public: Square(int i)s=i*i;cout实数平方数为sendl; Square(float i)s=i*i;cout单精度平方
10、数为sendl; Square(double i)s=i*i;cout双精度平方数为sendl;void main() Cpoint distance1(0,0,3,4); Cpoint distance2(0.0f,0.0f,3.0f,4.0f); Square(9); Square(5.0f); Square(4.0);程序实现分析:1.一开始的时候开始调试Cpoint类的时候出现了以下问题:解决方案如下:这个时候的结果为:2.经过修改和添加另外一个类后,得最终的设计代码结果如下:*4 课后练习调试下面的程序,指出程序实现的功能及程序输出结果;进一步理解函数重载及成员函数重载的实现。 1)
11、调试程序1 # includeint Abs ( int x ) / cout调用函数Abs(int)。=0 ? x :-x ; double Abs (double x) / B cout 调用函数Abs(double)。=0?x :-x ;void main ( )cout-20的绝对值是:Abs(-20)endl ; /C cout-111.11的绝对值是:Abs(-111.11) endl ;/D功能分析:程序通过两个同函数名但参数类型不同的两个函数分别实现对整型和实数型的取绝对值功能。输出结果:2)调试程序2#include int max (int a , int b);int m
12、ax (int a , int b,int c);int max (int a , int b, int c, int d);void main() coutmax(3,5)endl; coutmax(-7,9,0)endl; coutmax(23,15,3,6)b?a:b ;int max(int a, int b,int c) int t=max(a,b); return max (t , c);int max(int a ,int b ,int c ,int d) int t1=max(a,b); int t2=max(c,d); return max(t1,t2);功能分析:程序通过两
13、个同函数名但参数个数不同的三个函数分别实现对两个整数,三个整数,四个整数的求最大值功能运行结果如下:3)调试程序3# include class CAddpublic: int Add (int a , int b) /A return a+b; double Add(double x ,double y) /B return x+y ;int Add (int a , int b)return a+b ; /Cvoid main () CAdd c; cout5+3=c.Add(5,3)endl; /调用A行定义的函数 cout3.5+6.1=c.Add(3.5,6.1)endl; /调用B行定义的函数 cout5+10=Add(5,10)endl; /调用C行定义的函数功能分析:通过类的成员函数分别对整数和实数实现求和功能,另外,也可以通过子函数来实现求和功能AddAdd ( a:int ,b:int):intAdd(x:double ,y:double ):double
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1