实验8 多态性与虚函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
};
int main()
{ cout<<"(a)直接用对象访问成员函数: "<<endl;
Vehicle v;
v.run();
Car car;
Airplane airplane;
car.run();
airplane.run();
cout<<"(b)用指向基类的指针访问成员函数: "<<endl;
Vehicle *vp;
};
class Triangle2:public Shape
{
float S,H;
public:
Triangle2(float s=0){S=s; }
float Area( void){ return S*S; }
void Setdata(float s,float h) { S=s,H=h; }
};
};
int main()
{
Triangle t(4,6);
Triangle1 t1(3,8);
Triangle2 t2(6);
Triangle3 t3(8);
float sum=0;
Shape *a[4]={&t,&t1,&t2,&t3};
float n=5,m=9;
cin>>n>>m;
cout<<"三角形面积W* H/2="<<a[0]->Area()<<endl;
实验
一、实验目的和要求
1.了解多态的概念;
2.了解虚函数的作用及使用方法;
3.了解静态关联和动态关联的概念和用法;
4.了解纯虚函数和抽象类的概念和用法
二、实验内容和
1.阅读下面的程序
1.1请写出程序的执行结果,并在上机时对照理解
class Vehicle
{public:
void run() const { cout << "run a vehicle. "<<endl; } //(1) run()为虚函数
class Shape
{
public:
virtual float Area( void) =0;//求面积
virtual void Setdata(float ,float =0) =0;//设置图形数据
};
因面积的计算依赖于几何图形,故在类中只能定义一个纯虚函数Area。同理,设置几何图形数据的函数Setdata也只能定义为虚函数。
}
cout<<"所有几何图形面积之和"<<sum<<endl;
return 0;
}
结果:
class Triangle3:public Shape
{
float R,A;
public:
Triangle3(float r=0){ R=r; }
float Area(void){ return R*R*3.14; }
void Setdata(float r,float a){ R=r,A=a;}
void Setdata(float w,float h=0){ W=w; H = h; }
};
在派生类中定义了基类中两个虚函数的实现。为了实现求面积和设置数据的多态性,必须定义一个类,该类中定义一个指向基类Shape的指针数组,其元素分别指向由基类Shape派生出的不同的几何图形类,并完成求出所有几何图形面积之和,以及设置参数的函数。
把这个基类派生出其它几何图形类。如派生出的三角形类为:
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; }
{
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; }
源程序:
#include<iostream>
using namespace std;
class Shape
{
public:
virtual float Area( void) =0;//求面积
virtual void Setdata(float ,float=0) =0;//设置图形数据
};
class Triangle:public Shape
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()为虚函数
};
class Triangle1:public Shape
{
float W,H;
public:
Triangle1(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; }
};
1.3如果将Vehicle类的定义修改为纯虚函数,找出main()函数中将使编译出错的行删除(或改为注释),请写出程序的执行结果,并在上机时对照理解
class Vehicle
{public:
virtual void run() const = 0; //(3) run()为纯虚函数
};
1.4用自己的话概括你对虚函数、多态性和抽象类的理解。
cout<<"矩形面积W* H="<<a[1]->Area()<<endl;
cout<<"正方形面积S*S="<<a[2]->Area()<<endl;
cout<<"圆面积="<<a[3]->Area()<<endl;
for(int i=0;i<4;i++)
{
a[i]->Setdata(n,m);
sum+=a[i]->Area();
解:
计算这四种几何图的面积公式分别是:
a[i]->Area()的边长为W,高为H时,则三角形的面积为W* H/2;
矩形的边长为W,宽为H时,则其面积为W* H;
正方形的边长为S,则正方形的面积为S*S;
圆的半径为R,其面积为3.1415926 *R *R。
为设置几何图形的数据并求出几何图形的面积,需要定义一个包含两个虚函数的类:
};
class Car: public Vehicle
{public:
void run() const {cout << "run a car. "<<endl; }
Leabharlann Baidu};
class Airplane: public Vehicle
{public:
void run() const {cout << "run a airplane. "<<endl;}
虚函数:就是在基类声明函数是虚拟的,并不是实际存在的函数,允许在派生类中重新定义与基类同名的函数.
多态性:同一类族中不同类的对象,对同一函数调用做出不同的响应。
抽象类:不用来定义对象而只作为一种基本类型用作继承的类;为一个类族提供一个公共接口。
2.利用虚函数实现的多态性来求四种几何图形的面积之和。
这四种几何图形是:三角形、矩形、正方形和圆。几何图形的类型可以通过构造函数或通过成员函数来设置。
相关文档
最新文档