欢迎来到天天文库
浏览记录
ID:28154572
大小:91.50 KB
页数:12页
时间:2018-12-08
《实验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#include4、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;}};classRec5、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;}voidS6、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]=newTr7、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){float8、sum=0;for(inti=0;i<4;i++)sum+=s[i]->Area();//通过
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();//通过
此文档下载收益归作者所有