实验8 多态性与虚函数.docVIP

  • 4
  • 0
  • 约3.4千字
  • 约 6页
  • 2019-09-10 发布于山西
  • 举报
实验八 多态性与虚函数 一、实验目的和要求 了解多态的概念; 了解虚函数的作用及使用方法; 了解静态关联和动态关联的概念和用法; 了解纯虚函数和抽象类的概念和用法 二、实验内容和结果 阅读下面的程序? 1.1请写出程序的执行结果,并在上机时对照理解? class?Vehicle?? {public:?? ? void?run()?const?{?cout??run?a?vehicle.?endl;?}?//(1)?run()为虚函数? };?? class?Car:?public?Vehicle?? {public:?? ? void?run()?const?{cout??run?a?car.?endl;?? }?? };?? class?Airplane:?public?Vehicle?? {public:?? ? void?run()?const?{cout??run?a?airplane.?endl;}?? };?? int?main()?? {? cout(a)?直接用对象访问成员函数:?endl;? ? Vehicle?v;? ? v.run();? ? Car?car;?? ? Airplane?airplane;?? ? car.run();? ? airplane.run();? ? cout(b)?用指向基类的指针访问成员函数:?endl;? ? Vehicle?*vp;? ? vp=car;? ? vp‐run();? ? vp=airplane;? ? vp‐run();? }?? 1.2 如果将 Vehicle 类的定义修改为虚函数,其余不变,请写出程序的执行结果,并在上机时对照理解? class?Vehicle?? {public:?? ? virtual?void?run()?const?{?cout??run?a?vehicle.?endl;?}?//(2)?run()为虚函数? };? 1.3如果将 Vehicle 类的定义修改为纯虚函数,找出 main()函数中将使编译出错的行删除(或改为注释) ,请写出程序的执行结果,并在上机时对照理解? class?Vehicle?? {public:?? ? virtual?void?run()?const?=?0;?//(3)?run()为纯虚函数? };?? 用自己的话概括你对虚函数、多态性和抽象类的理解。 虚函数:就是在基类声明函数是虚拟的,并不是实际存在的函数,允许在派生类中重新定义与基类同名的函数. 多态性:同一类族中不同类的对象,对同一函数调用做出不同的响应。 抽象类:不用来定义对象而只作为一种基本类型用作继承的类;为一个类族提供一个公共接口。 利用虚函数实现的多态性来求四种几何图形的面积之和。 这四种几何图形是:三角形、矩形、正方形和圆。几何图形的类型可以通过构造函数或通过成员函数来设置。 解: 计算这四种几何图的面积公式分别是: a[i]-Area()的边长为W,高为H时,则三角形的面积为W* H/2; 矩形的边长为W,宽为H时,则其面积为W* H; 正方形的边长为S,则正方形的面积为S*S; 圆的半径为R,其面积为 3.1415926 *R *R。 为设置几何图形的数据并求出几何图形的面积,需要定义一个包含两个虚函数的类: class Shape { public: virtual float Area( void) =0; //求面积 virtual void Setdata(float ,float =0) =0; //设置图形数据 }; 因面积的计算依赖于几何图形,故在类中只能定义一个纯虚函数Area。同理,设置几何图形数据的函数Setdata也只能定义为虚函数。 把这个基类派生出其它几何图形类。如派生出的三角形类为: class Triangle:public Shape { float W,H; //三角形边长为W,高为H public: Triangle(float w=0,float h=0){ W=w; H = h; } float Area( void){ return W*H/2; } void Setdata(float w,float h=0){ W=w; H = h; } }; 在派生类中定义了基类中两个虚函数的实现。为了实现求面积和设置数据的多态性,必须定义一个类,该类中定义一个指向基类Shape的指针数组,其元素分别指向由基类Shape派生出的不同的几何图形类,并完成求出所有几何图形面积之和,以及设置参数的函数。 源程序: #includeiostream using namespace std; class Shape { pu

文档评论(0)

1亿VIP精品文档

相关文档