资源描述:
《形状类的设计及实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C++实验报告2014年6月4日实验题目:形状类的设计与实现实验目的:1)什么是多态,多态是面向对象程序设计的重要特性之一,它与封装性和继承性构成了面向对象程序设计的三大特性。所谓多态,是指不同类型的对象接收相同的消息时产生不同的行为。2)虚函数的作用,由于多态分为静态联编和动态联编,而在静态联编下,同一个成员函数在基类和派生类中的不同版本是不会在运行时根据程序代码的指定进行自动绑定的。因此必须通过类的虚函数机制,才能实现基类和派生类中的成员函数不同版本的动态联编。3)运算符重载的作用,运算符重载就是赋予已有的运算符多重含义,是一种静态联编的多态。通过重新定义运
2、算符,使其能够用于特定类对象执行特定的功能,从而增强了C++语言的扩充能力。实验内容:(1)出现Ex_Shape.cpp:定义一个抽象类CShape,包含纯虚函数Area(用来计算面积)和SetData(用来重设形状大小)。然后派生出三角形CTriangle类,矩形CRect类,园CCircle类,分别求其面积。最后定义一个CArea类,计算这几个形状的面积之和,各形状的数据通过CArea类构造函数或成员函数来设置。编写一个完整的程序。(2)程序Ex_Complex.cpp:定义一个复数类CComplex,通过重载运算符“*“和”/“,直接实现两个复数之间的乘除
3、运算。运算符”*“用成员函数实现重载,而运算符”/“用友元函数实现重载。编写一个完整的程序(包括测试运算符的程序部分)。提示:两个复数相乘的计算公式为(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。实验步骤:1)在D:VisualC++程序GuHao文件夹中创建一个新的子文件夹62)启动VisualC++6.0,输入程序Ex_Shape.cpp并进行运行和编译,相关代码如下:#includecl
4、assCShape{public:virtualfloatArea()=0;//将Area定义成纯虚函数virtualvoidSetData(floatf1,floatf2)=0;//将SetData定义成纯虚函数};classCTriangle:publicCShape{public:CTriangle(floath=0,floatw=0){H=h;W=w;}floatArea(){//在派生类定义纯虚函数的具体实现代码return(float)(H*W*0.5);}voidSetData(floatf1,floatf2){H=f1;W=f2;}private
5、:floatH,W;};classCRect:publicCShape{public:CRect(floath=0,floatw=0){H=h;W=w;}floatArea(){//在派生类定义纯虚函数的具体实现代码return(float)(H*W);}voidSetData(floatf1,floatf2){H=f1;W=f2;}private:floatH,W;};classCCircle:publicCShape{public:CCircle(floatr=0){R=r;}floatArea(){//在派生类定义纯虚函数的具体实现代码return(flo
6、at)(3.14159265*R*R);}voidSetData(floatr,float){//保持与纯虚函数一致R=r;}private:floatR;};classCArea{public://忘记设置访问权限CArea(floattriWidth,floattriHeight,floatrcWidth,floatrcHeight,floatr){ppShape=newCShape*[3];ppShape[0]=newCTriangle(triWidth,triHeight);ppShape[1]=newCRect(rcWidth,rcHeight);pp
7、Shape[2]=newCCircle(r);}~CArea(){for(inti=0;i<3;i++)deleteppShape[i];delete[]ppShape;}voidSetShapeData(intn,floatf1,floatf2=0){//n为0表示操作的是三角形,1表示是矩形,2表示圆形if((n>2)
8、
9、(n<0))return;ppShape[n]->SetData(f1,f2);}voidCalAndPrint(void){//计算并输出floatfSum=0.0;char*str[3]={"三角","矩","园"};for(inti=
10、0;i<3;i++){f