1福建工程学院计算机与信息科学系实验报告2013–2014学年第一学期任课老师:xxx课程名称面向对象程序设计班级软工座号姓名实验题目多态程序设计实验时间实验开始日期:2013/10/27报告提交日期:xxxx实验目的、要求实验目的:理解运算符重载的概念和实质,掌握运算符重载函数的定义方法,掌握运算符重载为类的成员函数和友元函数的方法。掌握虚函数的定义方法及其在实现多态性中的应用,理解静态连编和动态链编的区别。实验要求:在上机前写出全部源程序;能在机器上正确运行程序实验设计内容实验内容:1.已知基类:classBase{public:virtualvoidI_am(){cout”Base”endl;}};要求:(1)从Base类中派生出两个类,分别定义I_am()函数,实现输出自己类的名字。(2)主函数中创建者3个类的对象来调用I_am()函数,再利用Base的指针数组通过循环语句来调用这3个对象的I_am()函数。2.编写程序,计算圆柱体,球体,正方体的表面积和体积。要求用抽象类实现。3.设计字符串类String,完成以下功能:(1)使用+运算符实现两个字符串的连接功能。(2)使用=运算符实现字符串的复制功能。(3)使用==运算符判断两个字符串是否相等功能。(4)计算字符串长度的功能。根据实验内容的描述设计算法:#includeiostream#includestringusingnamespacestd;/*实验内容1*/classBase{public:virtualvoidI_am(){coutBaseendl;}};classBase1:publicBase2{public:voidI_am(){coutBase1endl;}};classBase2:publicBase{public:voidI_am(){coutBase2endl;}};classGraph{public:virtualfloatgetArea()=0;virtualfloatgetVolume()=0;};/*实验内容2*/classCylinder:publicGraph{public:Cylinder(floatr,floath){radius=r;height=h;}floatgetArea(){return2*PI*radius*radius+2*PI*radius*height;}floatgetVolume(){returnPI*radius*radius*height;}private:floatradius;floatheight;staticconstfloatPI;};constfloatCylinder::PI=3.14;classBall:publicGraph3{public:Ball(floatr){radius=r;}floatgetArea(){return4*PI*radius*radius;}floatgetVolume(){return4.0/3*PI*radius*radius*radius;}private:floatradius;staticconstfloatPI;};constfloatBall::PI=3.14;classSquare:publicGraph{public:Square(floatnewA){a=newA;}floatgetArea(){return6*a*a;}floatgetVolume(){returna*a*a;}private:floata;};/*实验内容3*/4classString{public:String(){len=0;s=NULL;}String(char*p){len=strlen(p);s=newchar(len+1);strcpy(s,p);}intgetLen(){returnlen;}char*getStr(){returns;}friendStringoperator+(constString&s1,constString&s2);voidoperator=(constString&str);booloperator==(constString&str);private:intlen;char*s;};Stringoperator+(constString&s1,constString&s2){intlen=s1.len+s2.len;char*str=newchar(len+1);strcpy(str,s1.s);strcat(str,s2.s);Stringsum(str);returnsum;5}voidString::operator=(constString&str){len=str.len;s=newchar(len+1);strcpy(s,str.s);}boolString::operator==(constString&str){return(len==str.len&&strcmp(s,str.s)==0);}intmain(){Baseb;Base1b1;Base2b2;b.I_am();b1.I_am();b2.I_am();Base*p[3]={&b,&b1,&b2};for(inti=0;i3;i++){p[i]-I_am();}cout===========================endl;Cylinderc(3,4);Ballba(5);Squares(4);cout面积:c.getArea()体积:c.getVolume()endl;cout面积:ba.getArea()体积:ba.getVolume()endl;cout面积:s.getArea()体积:s.getVolume()endl;cout===========================endl;Stringas(abc);Stringbs(def);Stringcs;cs=as+bs;as=cs;if(as==cs)cout相等endl;6coutcs.getLen()cs.getStr()endl;system(pause);return0;}调试过程记录实验结果记录以及与预期结果比较以及分析实验结果符合预期和实验要求总结以及心得体会多态是面向对象的一个重要特性,对程序设计来说具有很强的灵活性指导老师评阅意见指导老师:年月日