实验4友元函数及虚函数应用

实验4友元函数及虚函数应用

ID:28154572

大小:91.50 KB

页数:12页

时间:2018-12-08

实验4友元函数及虚函数应用_第1页
实验4友元函数及虚函数应用_第2页
实验4友元函数及虚函数应用_第3页
实验4友元函数及虚函数应用_第4页
实验4友元函数及虚函数应用_第5页
资源描述:

《实验4友元函数及虚函数应用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、-实验4友元函数及虚函数的应用4.1实验目的1.掌握友元函数的定义方法2.理解并掌握利用虚函数实现动态多态性和编写通用程序的方法3.掌握静态数据成员的特性4.2实验内容与步骤1.上机实验题一利用虚函数实现的多态性来求四种几何图形的面积之和。这四种几何图形是:三角形、矩形、正方形和圆。几何图形的类型可以通过构造函数或通过成员函数来设置。⑴分析计算这四种几何图的面积公式分别是:三角形的边长为W,高为H时,则三角形的面积为W*H/2;矩形的边长为W,宽为H时,则其面积为W*H;正方形的边长为S,则正方形的面积为S*S;圆的半径为R,其面积为3.1415926

2、*R*R。为设置几何图形的数据并求出几何图形的面积,需要定义一个包含两个虚函数的类:classShape{public:virtualfloatArea(void)=0;//求面积virtualvoidSetdata(float,float=0)=0;//设置图形数据};因面积的计算依赖于几何图形,故在类中只能定义一个纯虚函数Area。同理,设置几何图形数据的函数Setdata也只能定义为虚函数。把这个基类派生出其它几何图形类。如派生出的三角形类为:classTriangle:publicShape{floatW,H;//三角形边长为W,高为Hpubl

3、ic:Triangle(floatw=0,floath=0){W=w;H=h;}floatArea(void){returnW*H/2;}voidSetdata(floatw,floath=0){W=w;H=h;}};.---在派生类中定义了基类中两个虚函数的实现。为了实现求面积和设置数据的多态性,必须定义一个类,该类中定义一个指向基类Shape的指针数组,其元素分别指向由基类Shape派生出的不同的几何图形类,并完成求出所有几何图形面积之和,以及设置参数的函数。一个完整的参考程序如下:#include#include

4、ng.h>classShape{public:virtualfloatArea(void)=0;//虚函数virtualvoidSetdata(float,float=0)=0;//虚函数};classTriangle:publicShape{floatW,H;//三角形边长为W,高为Hpublic:Triangle(floatw=0,floath=0){W=w;H=h;}floatArea(void)//定义虚函数{returnW*H/2;}voidSetdata(floatw,floath=0)//定义虚函数{W=w;H=h;}};classRec

5、tangle:publicShape{floatW,H;//矩形边长为W,高为Hpublic:Rectangle(floatw=0,floath=0){W=w;H=h;}floatArea(void)//定义虚函数{returnW*H;}voidSetdata(floatw,floath=0)//定义虚函数{W=w;H=h;}};.---classSquare:publicShape{floatS;//正方形边长Spublic:Square(floata=0){S=a;}floatArea(void)//定义虚函数{returnS*S/2;}voidS

6、etdata(floatw,floath=0)//定义虚函数{S=w;}};classCircle:publicShape{floatR;//圆的半径为Rpublic:Circle(floatr=0){R=r;}floatArea(void)//定义虚函数{return3.1415926*R*R;}voidSetdata(floatw,floath=0)//定义虚函数{R=w;}};classCompute{Shape**s;//指向基类的指针数组public:Compute(){//给几何图形设置参数s=newShape*[4];s[0]=newTr

7、iangle(3,4);.---s[1]=newRectangle(6,8);s[2]=newSquare(6.5);s[3]=newCircle(5.5);}floatSumArea(void);~Compute();voidSetdata(intn,floata,floatb=0)//A{s[n]->Setdata(a,b);}//B};Compute::~Compute()//释放动态分配的存储空间{for(inti=0;i<4;i++)deletes[i];delete[]s;}floatCompute::SumArea(void){float

8、sum=0;for(inti=0;i<4;i++)sum+=s[i]->Area();//通过

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。