资源描述:
《c++ 实验五 多态和虚函数、运算符重载》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第组.多态和虚函数、运算符重载一、实验目的1.理解虚函数的特性;2.理解纯虚函数和抽象类的特性;3.掌握用虚函数实现运行时的多态性和编写通用程序的方法;4.掌握用成员函数和友元函数重修运算符的方法。二、内容与设计思想上机实践内容:1.定义一个抽象类CShape,包含纯虚函数Area()(用来计算面积)和SetData()(用来重设形状大小)。然后派生出三角形CTriangle类、矩形CRect类、圆CCircle类,分别求其面积。最后定义一个CArea类,计算这几个形状的面积之和,个形状的数据通过CArea类构造函数或成员函数来设置。编程一个完整的程序。2.定义一个复数类CCom
2、plex,通过重载运算符“*”和“/”,直接实现两个复数之间的乘除运算。编写一个完整的程序(包括测试运算符的程序部分)。运算符“*”用成员函数实现重载,而运算符“/”用友元函数实现重载。提示:两复数相乘的计算公式为:(a+bi)*(c+di)=(ac-bd)+ad+bc)i;两复数相除的计算公式为:(a+bi)/(c+di)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d)i;三、使用环境操作系统:WindownsXPC++环境:VisualC++6.0四、核心代码及调试过程#includeclassCShape{public:vir
3、tualfloatArea()=0;virtualvoidSetData(floatf1,floatf2)=0;};classCTriangle:publicCShape{public:CTriangle(floath=0,floatw=0)6{H=h;W=w;}floatArea(){return(float)(H*W*0.5);}voidSetData(floatf1,floatf2){H=f1;W=f2;}private:floatH,W;};classCRect:publicCShape{public:CRect(floath=0,floatw=0){H=h;W=w;}f
4、loatArea(){return(float)(H*W);}voidSetData(floatf1,floatf2){H=f1;W=f2;}private:floatH,W;};classCCircle:publicCShape{public:6CCircle(floatr=0){R=r;}floatArea(){return(float)(3.14159265*R*R);}voidSetData(floatr,float){R=r;}private:floatR;};classCArea{public:CArea(floattriWidth,floattriHeight,fl
5、oatrcWidth,floatrcHeight,floatr){ppShape=newCShape*[3];ppShape[0]=newCTriangle(triWidth,triHeight);ppShape[1]=newCRect(rcWidth,rcHeight);ppShape[2]=newCCircle(r);}~CArea(){for(inti=0;i<3;i++)deleteppShape[i];delete[]ppShape;}voidSetShapeData(intn,floatf1,floatf2=0){6if((n>2)
6、
7、(n<0))return;ppS
8、hape[n]->SetData(f1,f2);}voidCalAndPrint(void){floatfSum=0.0;char*str[3]={"Triangle","Rectangle","Circle"};for(inti=0;i<3;i++){floatarea=ppShape[i]->Area();cout<9、3,4,3.5);a.CalAndPrint();a.SetShapeData(0,10,15);a.CalAndPrint();a.SetShapeData(4,11);a.CalAndPrint();a.SetShapeData(1,3,5);6a.CalAndPrint();}#includeusingnamespacestd;classComplex{floatReal,Image;public:Complex(floatr=0,floati=0){R