第6章 虚函数与多态性.ppt

第6章 虚函数与多态性.ppt

ID:48771384

大小:1.33 MB

页数:66页

时间:2020-01-23

第6章 虚函数与多态性.ppt_第1页
第6章 虚函数与多态性.ppt_第2页
第6章 虚函数与多态性.ppt_第3页
第6章 虚函数与多态性.ppt_第4页
第6章 虚函数与多态性.ppt_第5页
资源描述:

《第6章 虚函数与多态性.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1第二部分面向对象的程序设计第3章 类和对象(一)第4章 类和对象(二)第5章 继承和派生第6章 虚函数与多态性第7章 运算符重载第8章 模板第9章 标准模板库STL第10章C++语言的输入和输出2第6章 虚函数与多态性本章要点:多态性的概念虚函数的定义与应用多继承与虚函数纯虚函数与抽象类3多态性(Polymorphism)是面向对象程序设计的一个非常重要的特性,如果不支持多态性,C++就不是真正的面向对象程序设计语言。多态性指的是不同的对象对于同样的消息会产生不同的行为,而消息在C++语言中指的就是函数的调用,不同的函数可以具有多种不同的功能,而多态就是允许用一个函数名的调用来

2、执行不同的功能。46.1多态性概述6.1.1多态的类型多态性不仅限于C++语言,从面向对象技术的角度来看,多态性可以分为四类:(1)重载多态,前面学习的函数重载就属于此概念,运算符重载也是重载多态(第7章将详细介绍)。(2)强制多态,指将一个变量类型加以变化,以符合一个函数或者操作的要求,例如加法运算符在进行浮点数与整型数相加时,首先要对整型数进行强制类型转换为浮点数再相加的情况,就是强制多态的实例。(3)包含多态,同样的操作可用于一个类型及其子类型。包含多态一般需要进行运行时的类型检查,主要是通过虚函数来实现。(4)参数多态,采用参数化模板,通过给出不同的类型参数,使得一个结构

3、可以适用多种数据类型,C++提供的函数模板和类模板即为典型的参数多态(第8章将详细介绍)。5对于多态性,一个要解决的主要问题就是何时把具体的操作和对象进行绑定(binding),也称联编、关联,绑定也指的是程序如何为类的对象找到执行操作函数的程序入口的过程。从系统实现的角度来看,多态可以分为两类:编译时多态运行时多态6编译时多态,指的在程序编译过程中时决定同名操作与对象的绑定关系,也称静态绑定、静态联编,典型的技术有函数重载、运算符重载、模板。由于这种方式是在程序运行前就确定了对象要调用的具体函数,因此程序运行的时候函数调用速度快、效率较高。其缺点是编程不够灵活。7运行时多态,指

4、的是在程序运行过程中动态地确定同名操作与具体对象的绑定关系,也称动态绑定、动态联编等,主要通过使用继承和虚函数来实现。在编译、连接过程中确定绑定关系,程序运行之后才能确定。动态绑定的优点是编程更加灵活、系统易于扩展。由于内部增加了实现虚函数调用的机制,因此要比静态绑定的函数调用速度慢些。86.1.2基类指针指向派生类对象【例6.1】函数重载在多态性中的应用。/*06_01.cpp*/#includeusingnamespacestd;classBase//基类{public:voidPrint(){cout<<”BaseClassPrint.”<

5、};9classDerived:publicBase//公有派生类{public:voidPrint(){cout<<”DerivedClassPrint.”<Print();pb=&d1;//希望调用派生类对象d1的Print函数pb->Print();return0;}10BaseClassPrint.DerivedClassPrint.Bas

6、eClassPrint.BaseClassPrint.BaseClassPrint.程序的运行结果为:11在派生类中重写了成员函数Print(),使得不同的对象对同一函数名的调用产生了不同的结果,这就是多态性的具体表现,不过却是编译时多态。在程序中可以看到,要想输出对应的字符串,必须明确地指出调用哪个对象的成员函数,即通过类的对象调用,或者通过加类名限定进行调用,如例6.l中的语句:bl.Print();//调用基类对象b1的Print函数d1.Print();//调用派生类对象d1的Print函数d1.Base::Print();//调用派生类对象d1中的继承基类的Print(

7、)函数12这样调用成员函数的方法是显示调用,对于结构复杂的程序,每个对象都显式地写出要调用的成员函数是不切实际的,往往需要通过对象指针或引用来实现对成员函数的调用。程序结果可以看出,在例6.1中定义了一个基类的指针pb,当把这个指针指向派生类的对象时,希望调用派生类对象d1的Print()函数,但却仍然调用了d1对象包含的基类成员函数Print()。即本程序希望运行结果为:BaseClassPrint.SubClassPrint.BaseClassPrint.BaseClassP

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

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

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