资源描述:
《多态和虚函数、运算符重载》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验六多态和虚函数、运算符重载2012/15学号1108324054姓名王迎博
2、]寸间2012/6/15专业网络工程班级2011级网络工程一、实验题目:形状类的设计与实现二、实验目的:(1)理解虚函数的特性。(2)理解纯虚函数和抽象类的特性。(3)掌握用虚函数实现运行时的多态的方法。三、实验内容:(1)程序Ex_Shape:定义一个抽象类CShape,包括纯虚函数Area(用于计算面积)和SetData(用于重设形状大小),然后派生岀三角形CTriangle类、矩形CRect类、圆CCircle类,分别求其面积.最后定义一个CArea类,计算这几个形状的面积之和,各形状的数据通过CArea
3、类构造或成员函数来设置,编写一个完整的程序。⑵程序Ex_Complex:定义一个复数类CComplex,通过重载运算符“*”和直接实现两个复数Z间的乘除运算。运算符““用成员函数实现重载,而运算符用友元函数实现重载。编写一个完整的程序(包括测试运算符的程序部分)。提示:两复数相乘的计算公式为:(a+bi)*(c+di)=(ac-bd)+ad+bc),而两复数相除的计算公式为:(a+bi)/(c+di)=(ac+bd)/(c*c+d*d)+(bc・ad)/(c*c+d*d)i。四、实验步骤:1、创建工作文件夹2、输入并运行Ex_Shape.cpp的具体步骤如下。(1)启动VirtualC++
4、6.0⑵单击标准工具栏上的“NewTextFile”按钮,在新打开的文档窗口屮输入下列程序代码:#includeclassCShape{public:virtualfloatArea()=0;〃将Area定义成纯虚函数virtualvoidSetData(floatfl,floatf2)二0;//将SetData定义成纯虚函数};classCTriangle:publicCShape{public:CTriangle(floath=0,floatw=0){H=h;W=w;}floatArea()〃在派生类定义纯虚函数的具体实现代码{returnCfloaOCH^W^
5、O.S);}voidSetData(floatfl,floatf2){H=fl;W=f2;}private:floatH,W;};classCRect:publicCShape{public:CRect(floath=0,floatw=0){H=h;W=w;}floatArea()〃在派牛类定义纯虚函数的具体实现代码{return(float)(H*W);}voidSetData(floatfl,floatf2){H=fl;W=f2;}private:floatH,W;};classCCircleipublicCShape{public:CCircle(floatr=0){R二「}floa
6、tArea()〃在派生类定义纯虚函数的具体实现代码{retum(float)(3」4159265*R*R);}voidSetData(floatr,float)//保持与虚函数一致{R=r;}private:floatR;};classCArea{public:CArea(floattriWidth,floattriHeight,floatreWidth,floatrcHeight,floatr){ppShape=newCShape*[3];ppShape[O]=newCTriangle(triWidth,triHeight);ppShape[l]=newCRect(rcWidth,rcH
7、eight);ppShape[2]=newCCircle(r);}~CArea(){for(inti二0;i<3;i++)deleteppShape[i];deleteflppShape;}voidSetShapeData(intn,floatfl,floatf2=0)〃n为0表示操作的是三角形,1表示矩形,2表示圆形{if((n>2)11(n<0))retum;ppShape[n]->SetData(fl,f2);}voidCalAndPrint(void)〃计算并输出{floatfSum=0.0;char*str[3]={H三角”,”矩T圆”};for(inti=0;i<3;i++){
8、floatarea=ppShape[i]->Area();〃通过基类指针,求不同形状的面积cout«str[i]«"形面积是:u«area«endl;fSum+=area;}cout«"总面积是:"«fSum«endl;}private:CShape**ppShape;〃指向基的指针数组};voidmain(){CAreaa(10,20,6,&6.5);a.CalAndPrint();a.SetShapeData(0,2