《实验五 多态.docx》由会员分享,可在线阅读,更多相关《实验五 多态.docx(9页珍藏版)》请在第一文库网上搜索。
1、实验五多态程序设计一、实验目的:理解运算符重载的概念和实质,掌握运算符重载函数的定义方法,掌握运算符重载为类的成员函数和友元函数的方法。掌握虚函数的定义方法及其在实现多态性中的应用,理解静态连编和动态链编的区别。二、实验时间:三、实验地点:四、实验内容:1 .已知基类:c1assBasepub1ic:virtua1voidI_am()cout,Base,end1;);要求:(1)从BaSe类中派生出两个类,分别定义1amo函数,实现输出自己类的名字。(2)主函数中创建者3个类的对象来调用1am()函数,再利用Base的指针数组通过循环语句来调用这3个对象的1amo函数。2 .编写程序,计算圆柱
2、体,球体,正方体的表面积和体积。要求用抽象类实现。3 .设计字符串类String,完成以下功能:(1)使用+运算符实现两个字符串的连接功能。(2)使用二运算符实现字符串的复制功能。(3)使用=运算符判断两个字符串是否相等功能。(4)计算字符串长度的功能。五、实验要求:在上机前写出全部源程序;六、实验结果分析:1、已知基类:c1assBasepub1ic:virtua1voidI-am()cout,Base,end1;);结果:代码:#inc1udeusingnamespacestd;c1assBase(pub1ic:virtua1voidI_am()coutBasenend1;);c1assB
3、asekpub1icBase(pub1ic:virtua1void1am()coutv我是第一个继承Base的Base,end1;);c1assBase2:pub1icBase(pub1ic:virtua1void1am()coutv我是第二个继承Base的Base2,end1;);intmain()Basep,*a3;Base1p1;Base2p2;a0=&p;a1=&p1;a2J=&p2;for(inti=0;iI.am();)return0;2、编写程序,计算圆柱体,球体,正方体的表面积和体积。要求用抽象类实现。结果:1、计算圆柱体的体积和表面积1高2,4.J一:工BS为积一用的学CEE
4、BENC+fi2x表面积和献.exe2、计算球体的体积和表面积E1BENC+52s表面Oa醐.exe2.S2i:;r D 5 1 2 4VHr 3 径56: :.565长半:鬻78,边的为奉体积国为整后加积面方圆表正人强人的的人 lnt清圆圆g3、计算正方体的体积和表面积E:BENC+52x表面Oa够exe2.S高 2.4.50 5 124 - 356:.565长47:中.zl78-:为 &军,Rf积体积ISS为量积面 H体羊株积面奈表圆的的球表正的的人注入的的人款方 Processreturned0eecutiontime:172.178sPreSSanykeytocontinue.代码:#
5、inc1udeusingnamespacestd;constf1oatPI=3.14;抽象类c1assBase(pub1ic:virtua1voidDisp1ayO=0;虚函数protected:f1oatr1,r2,h,a;1;圆柱体类c1assCy1inder:pub1icBase(pub1ic:Cy1inder(f1oatpr1,f1oatPh)构造函数(r1=pr1;h=ph;f1oatCy1inderSurfaceAreaO(return2*PI*r1*r1+2*PI*r1*h;1f1oatCy1inderVo1umeO(returnPI*r1*r1*h;1voidDisp1ayO(
6、cout”圆柱体的体积为:vvCyIinderSurfaceAreaOend1;cout圆柱体的表面积为:VVCy1inderVo1umeOend1;11;球类c1assSphere:pub1icBase(pub1ic:Sphere(f1oatpr2)构造函数(r2=pr2;f1oatSphereSurfaceAreaOreturn4*PI*r2*r2;)f1oatSphereVo1umeO(return4.0/3*PI*r2*r2*r2;1voidDisp1ayO(cout”球体的体积为:vvSphereSurfaceArea()end1;cout球体的表面积为:SphereVo1umeOe
7、nd1;11;正方体类c1assCube:pub1icBase(pub1ic:Cube(f1oatpa)构造函数(a=pa;f1oatCubeSurfaceAreaO(return6*a*a;f1oatCubeVo1umeO(returna*a*a;)voidDisp1ayO(cout正方体的体积为:CubeSurfaceArea()end1;cout正方体的表面积为:VVCubeVo1umeOend1;1);intmain()(f1oatpr1,pr2,ph,pa;COUtVV”请输入圆柱体的半径和高:”;cinpr1ph;Cy1inderp1(pr1,ph);p1.Disp1ay();Co
8、UtVV”请输入球体的半径:”;cinpr2;Spherep2(pr2);p2.Disp1ay();cout请输入正方体的边长:cinpa;Cubep3(pa);p3.Disp1ay();return0;)3、设计字符串类String结果:代码:#inc1ude#inc1ude#inc1udeusingnamespacestd;c1assStringpub1ic:String()Stringoperator+(constString&a);Strings)+1;strcpy(p,this-s);strcat(p,a.s);returnString(p);String&String:operat
9、or=(constString&a)(s=newcharstr1en(a.s)+1;strcpy(s,a.s);return*this;)intString:1ength(constString&a)returnstr1en(a.s);intString:operator=(constString&a)if(strcmp(s,a.s)=O)returnO;e1sereturn1;)intmain()(Strings1=abc,s2=abcdfsDSFs3;cout,s1=abcns2=abcdfsDSFend1;couts1的长度为:vs1.1ength(s1)end1;couts2的长度为:vs2.1ength(s2)end1;if(s1=s2)=0)(COUtvs1,s2相等!uend1;)e1secoutns1,s2不相等!,end1;s3=s1+s2;couts1+s2=s3.Get_s()end1;returnO;)七、实验心得体会及问题反馈:本实验主要对面向对象多态的初步掌握。其中对运算符重载、虚函数、纯虚函数、抽象类的概念进一步深化。通过这些练习我也逐渐对面向对象过程理解更加深刻。多态主要是通过不同的类的不同的对象实现不同的方法。