形状类的设计及实现.doc

上传人:scccc 文档编号:12455089 上传时间:2021-12-04 格式:DOC 页数:6 大小:67.50KB
返回 下载 相关 举报
形状类的设计及实现.doc_第1页
第1页 / 共6页
形状类的设计及实现.doc_第2页
第2页 / 共6页
形状类的设计及实现.doc_第3页
第3页 / 共6页
形状类的设计及实现.doc_第4页
第4页 / 共6页
形状类的设计及实现.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《形状类的设计及实现.doc》由会员分享,可在线阅读,更多相关《形状类的设计及实现.doc(6页珍藏版)》请在三一文库上搜索。

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:Visual C+程序GuHao文件夹中创建一个新的子文件夹62) 启动Visual C+6.0,输入程序Ex_Shape.cpp并进行运行和编译,相关代码如下:#include<iostream.h>class CShapepublic:virtual float Area()=0;/

4、将Area定义成纯虚函数virtual void SetData(float f1,float f2)=0;/将SetData定义成纯虚函数;class CTriangle:public CShapepublic:CTriangle(float h=0,float w=0)H=h;W=w;float Area()/在派生类定义纯虚函数的具体实现代码return (float)(H*W*0.5);void SetData(float f1,float f2)H=f1;W=f2;private:float H,W;class CRect:public CShapepublic:CRect(floa

5、t h=0,float w=0)H=h;W=w;float Area()/在派生类定义纯虚函数的具体实现代码return (float)(H*W);void SetData(float f1,float f2)H=f1;W=f2;private:float H,W;class CCircle:public CShapepublic:CCircle(float r=0)R=r;float Area()/在派生类定义纯虚函数的具体实现代码return (float)(3.14159265*R*R);void SetData(float r,float)/保持与纯虚函数一致R=r;private:f

6、loat R;class CAreapublic:/忘记设置访问权限CArea(float triWidth,float triHeight,float rcWidth,float rcHeight,float r)ppShape=new CShape*3;ppShape0=new CTriangle(triWidth,triHeight);ppShape1=new CRect(rcWidth,rcHeight);ppShape2=new CCircle(r);CArea()for(int i=0;i<3;i+)delete ppShapei;delete ppShape;void Se

7、tShapeData(int n,float f1,float f2=0)/n为0表示操作的是三角形,1表示是矩形,2表示圆形if(n>2)|(n<0) return;ppShapen->SetData(f1,f2);void CalAndPrint(void)/计算并输出float fSum=0.0;char* str3="三角","矩","园"for(int i=0;i<3;i+)float area=ppShapei->Area();/通过基类指针,求不同形状的面积cout<<stri&

8、lt;<"形面积是:"<<area<<endl;fSum+=area;cout<<"总面积是:"<<fSum<<endl;private:CShape *ppShape;/指向基类的指针数组;int main()/main拼写错误CArea a(10,20,6,8,6.5);a.CalAndPrint();a.SetShapeData(0,20,30);/重设三角形大小a.CalAndPrint();a.SetShapeData(2,11);/重设园的半径大小a.CalAndPrint()

9、;a.SetShapeData(1,2,5);/重设矩形大小a.CalAndPrint();return 0;3) Ex_Shape.cpp的运行结果如下:4)新建一个程序Ex_Complex.cpp,并进行编译和运行,代码如下:#include<iostream.h>class CComplexpublic:CComplex(double r=0,double i=0)realPart=r;imagePart=i;void Print()cout<<"该复数实部="<<realPart<<",虚部="&l

10、t;<imagePart<<endl;CComplex operator *(CComplex &b);/成员函数重载运算符friend CComplex operator / (CComplex &a,CComplex &b);/友元函数重载运算符private:double realPart;/复数的实部double imagePart;/复数的虚部;CComplex CComplex:operator *(CComplex &b)CComplex temp;temp.realPart=realPart*b.realPart-imagePa

11、rt*b.imagePart;temp.imagePart=realPart*b.imagePart+imagePart*b.realPart;return temp;CC omplex operator / (CComplex &a,CComplex &b)CComplex temp;double d=b.realPart*b.realPart+b.imagePart*b.imagePart;temp.realPart=(a.realPart*b.realPart+a.imagePart *b.imagePart)/d;temp.imagePart=(a.imagePart*

12、b.imagePart-a.realPart *b.imagePart)/d;return temp;6 / 6文档可自由编辑打印int main()CComplex c1(12,20),c2(50,70),c;c=c1*c2;c.Print();c=c1/c2;c.Print();return 0;5)运行结果如下截图所示:分析与体会:1) Ex_Shape.cpp在编译运行时出现的错误提示如下截图所示:编译时:原因是:忘记设置访问权限所提示的错误原因是:main拼写错误的原因2)Ex_Complex.cpp在编译运行时提示的错误:原因是:因为上一个Ex_Shape的工作空间未关闭的原因实验指导教师(签字)实验成绩

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1