- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验四多态性与虚函数.doc
PAGE
PAGE 57
实验四 多态性与虚函数
一、 实验目的和要求
1 了解多态性在C++中的体现;
2 掌握虚函数的应用;
3 了解抽象类。
4.3二、 基本概念
多态性
多态是指同样的消息被不同类型的对象接收时导致不同的行为,所谓消息是指对类的成员函数调用,不同的行为是指不同的实现,也就是调用了不同的函数。
多态性可以分为四类:重载多态、强制多态、包含多态和参数多态。
多态从实现的角度来讲可以划分为两类:编译时的多态和运行时的多态。编译时的多态性是在编译的过程中确定了同名操作的具体操作对象,也就是通过重载函数来实现的。运行时的多态性是在程序运行过程中才动态地确定操作所针对的具体对象,就是用虚函数来实现的。
虚函数
虚函数是重载的另一种表现形式,它是一种动态的重载方式,它提供了一种更为灵活的多态性机制。虚函数允许函数调用与函数体之间的联系在运行时才建立,也就是在运行时才决定如何动作,即所谓的“动态连接”。
一般虚函数成员的定义语法是:
virtual 函数类型 函数名(形参表)
虚函数的定义实际就是在原有的普通函数成员前面使用virtual关键字来限定,虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员的函数体中。
运行过程中的多态需要满足三个条件,首先类之间应满足赋值兼容规则,其二是要声明虚函数,第三是要由成员函数来调用或者是通过指针、引用来访问虚函数。
抽象类
抽象类是一种特殊的类,它为一族类提供统一的操作界面。一个抽象类自身无法实例化,也就是说我们无法定义一个抽象类的对象,只能通过继承机制,生成抽象类的非抽象派生类,然后再实例化。
抽象类是带有纯虚函数的类。纯虚函数是一个基类中说明的虚函数,它在该基类中没有定义具体的操作内容,要求各派生类必须根据实际需要定义自己的版本,纯虚函数的声明格式为:
virtual 函数类型 函数名(参数表)= 0;
声明为纯虚函数之后,基类中就不再给出函数的实现部分,它的实现是在它的派生类定义的。
对抽象类使用的几点规定如下:
1 抽象类只能用作其他类???基类,不能建立抽象类对象;
2 抽象类不能用作参数类型、函数返回类型或显式转换的类型;
3 可以说明指向抽象类的指针和引用,此指针可以指向它的派生类,进而实现多态性
一般虚函数成员的定义语法是:
virtual 函数类型 函数名(形参表)
纯虚函数的声明格式为:
virtual 函数类型 函数名(参数表)= 0;
三、 程序例题
例题4.1 有一个汽车类Vehicle,将它作为基类派生出小车类Car、卡车为类Truck和轮船类Boat,定义message()( )函数用来显示各类信息。
解:程序设计如下:
(1)在基类汽车类Vehicle类中,定义一个虚函数message()( ),用来显示信息;
(2)在各个派生类中,重新定义message()( )函数,以显示各自的信息;
(3)在测试函数中,定义基类指针ptr,当它指向不同的对象时,则执行不同对象所对应类的成员函数message()( )。
程序实现:
#include iostream.h
class Vehicle //车辆类Vehicle定义
{
public::
virtual void message()( ) {cout Vehicle message\n;}
private::
int wheels;
float weigth;;
};;
//汽车类Car定义
class Car:: public Vehicle
{ public:
void message( ) {cout “Car message\n;”;}
private::
int passenger_load;;
};;
//卡车类Truck定义
class Truck:: public Vehicle
{
public::
void message()( ) {cout “Truck message\n;”;}
private::
int passenger_load;;
float payload;;
};;
//轮船类Boat定义
class Boat:: public Vehicle
{
int passenger_load;;
public::
void message()( )
{
cout “Boat message\n;}”;
}
};;
void main( ())
{
Vehicle vehicle,, *ptr
您可能关注的文档
最近下载
- PRS-7000_220KV型数字变电站自动化系统技术使用说明书.pdf VIP
- 国开电大《个人与团队管理》(试卷号22269)机试试题.pdf
- 2024广东统招专升本《大学语文》全书知识点汇总课件.pdf
- 虫害控制程序(SSOP).doc VIP
- 2025届【九省联考】全国高三10月联考数学答案.docx
- 滥竽充数-完整版PPT课件.ppt
- 2024华医网继续教育护理多学科协作,为老年外科患者保驾护航题库答案.docx VIP
- 冀教版小学数学五年级上册7.3《土地资源问题》说课PPT(共21张PPT).pptx VIP
- 嵌入式技术入门与实战(基于STM32)全套教学课件.pptx
- 2024年煤炭销售绩效考核办法.pdf VIP
文档评论(0)