您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > C++面向实验对象实验十一
1内蒙古科技大学信息工程学院计算机系《面向对象程序设计》实验报告姓名学号实验成绩班级实验日期第16周(星期二)6月11日第节项目号、实验名称实验11多态(二)实验要求(任课教师提供)一、实验目的1.理解掌握运算符[]、()的重载;2.理解类型转换,掌握类型转换函数的设计和使用;3.理解和掌握虚函数的作用;4.掌握利用虚函数实现C++的运行时多态性;5.理解纯虚类和抽象类。二、实验内容2.1练习(一):1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。#includeiostream.h#includestdlib.hclassCComplex{public:CComplex(doubler=0,doublei=0){real=r;imag=i;}intoperatorint(){return(int)real;2}voidDisplay(void){cout(real,imag)endl;}protected:doublereal;doubleimag;};classCVector{public:CVector(CComplex&obj1,CComplex&obj2,CComplex&obj3,CComplex&obj4){objArray[0]=obj1;objArray[1]=obj2;objArray[2]=obj3;objArray[3]=obj4;}friendCComplex&operator[](CVectorobj,intn);private:CComplexobjArray[4];};CComplex&operator[](CVectorobj,intn){if(n0||n3){3coutOutofrange!endl;exit(0);}returnobj.objArray[n];}voidmain(){CComplexc1(1.1,1.1);CComplexc2(2.2,2.2);CComplexc3(3.3,3.3);CComplexc4(4.4,4.4);CVectorv(c1,c2,c3,c4);v[0].Display();v[1].Display();v[2].Display();v[3].Display();v[0]=5.5;----------------------------------------------------------①v[1]=CComplex(6.6);-------------------------------------------②v[2]=int(CComplex(7.7));--------------------------------------③v[3]=int(CComplex(8.8,9.9));----------------------------------④v[0].Display();v[1].Display();v[2].Display();v[3].Display();4}问题一:上述程序存在两大错误,在不修改主函数和程序原意的前提下,改正该程序中存在的错误。问题二:①处的转换属于显式转换还是隐式转换,并解释该转换过程。问题三:②处的转换属于显式转换还是隐式转换,并解释该转换过程。问题四:解释③处的转换过程。问题五:解释④处的转换过程。2.2练习(二):1.编写一个程序计算三角形、正方形和圆形的面积,要求抽象出一个基类base,在其中说明一个虚函数,用来求面积,并利用单接口,多实现版本设计各图形面积的方法。实验内容(由学生填写)#includeiostream#includecstdlibusingnamespacestd;classCComplex{public:CComplex(doubler=0,doublei=0){real=r;imag=i;}/*int*/operatorint()//类型转换成员函数功能是把类名所制定的类类型转换为operator后的类型名指定类型{return(int)real;}voidDisplay(void){cout(real,imag)endl;}protected:doublereal;doubleimag;};classCVector{public:CVector(CComplex&obj1,CComplex&obj2,CComplex&obj3,CComplex&obj4){5objArray[0]=obj1;objArray[1]=obj2;objArray[2]=obj3;objArray[3]=obj4;}CComplex&operator[](intn);//下标运算符只能重载为成员函数,删去参数表中前面的形参private:CComplexobjArray[4];};CComplex&CVector::operator[](intn){if(n0||n3){coutOutofrange!endl;exit(0);}returnobjArray[n];}intmain(){CComplexc1(1.1,1.1);CComplexc2(2.2,2.2);CComplexc3(3.3,3.3);CComplexc4(4.4,4.4);CVectorv(c1,c2,c3,c4);v[0].Display();v[1].Display();v[2].Display();v[3].Display();v[0]=5.5;//-----------------------------------------------------①v[1]=CComplex(6.6);//-------------------------------------------②v[2]=int(CComplex(7.7));//--------------------------------------③v[3]=int(CComplex(8.8,9.9));//----------------------------------④v[0].Display();v[1].Display();v[2].Display();v[3].Display();return0;}//问题一:上述程序存在两大错误,在不修改主函数和程序原意的前提下,改正该程序中存在的错误。//问题二:①处的转换属于显式转换还是隐式转换,并解释该转换过程。//隐式转换,隐式调用了带默认参数的构造函数6//问题三:②处的转换属于显式转换还是隐式转换,并解释该转换过程。//显示转换,CComplex类对象c2调用构造函数进行转换,把6.6转换为一个临时对象,在复制给v[1]//问题四:解释③处的转换过程。//首先把整形数字7.7显示调用带默认的构造函数,转换为一个临时对象,然后临时对象调用了类型转换函数//转换为整型int类型,7.7小数点后的数字被省略,然后转换之后的整型再隐含调用构造函数,转换为临时对//象,复制给v[2]//问题五:解释④处的转换过程。//同问题四,类型转换返回值只有real,后面9.9被省略2.2#includeiostreamusingnamespacestd;classbase{virtualvoidarea()=0;virtualvoidsetdata()=0;};classsanjiaoxing:publicbase{public:sanjiaoxing(){}voidsetdata(){7cout请输入三角形的高:endl;cinhigh;cout请输入三角形的底:endl;cindi;}voidarea(){cout三角形的面积=(high*di)/2endl;}private:doublehigh;doubledi;};classzhengfangxing:publicbase{private:doublea;public:zhengfangxing(){}voidsetdata(){cout请输入正方形的边长:endl;cina;}voidarea(){cout正方形面积=a*aendl;}};classyuan:publicbase{private:doubler;public:yuan(){}voidsetdata()8{cout请输入圆形的半径:endl;cinr;}voidarea(){cout圆形的面积=3.14159*r*rendl;}};intmain(){sanjiaoxingss;ss.setdata();ss.area();zhengfangxingzz;zz.setdata();zz.area();yuanyy;yy.setdata();yy.area();return0;}9实验总结(由学生填写)1.理解掌握运算符[]、()的重载;2.理解类型转换,掌握类型转换函数的设计和使用;3.理解和掌握虚函数的作用;4.掌握利用虚函数实现C++的运行时多态性;5.理解纯虚类和抽象类。说明:1、每个实验项目填写一份实验报告,电子版命名方式为:学号姓名项目号.doc。例如:1167111182张三3.doc表示张三做的第3个项目的实验报告。2、实验报告电子版应该在实验后一周内提交到教务处网站的网络综合平台对应课程下。3、任课教师要求在收到实验报告的一周内进行批阅,并给出成绩及评语。4、实验报告电子版由教务处网站服务器保存。5、表格宽度可以根据实际情况伸缩。
本文标题:C++面向实验对象实验十一
链接地址:https://www.777doc.com/doc-5444014 .html