第16章多态性优秀课件.ppt
《第16章多态性优秀课件.ppt》由会员分享,可在线阅读,更多相关《第16章多态性优秀课件.ppt(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第16章多态性第1页,本讲稿共32页-多态性-2主要内容n多态性的概念和多态类型 n联编n虚函数n抽象类 n运算符重载*第2页,本讲稿共32页-多态性-3多态性的概念 n多态性是面向对象程序设计的重要特征之一,多态性是面向对象程序设计的重要特征之一,是实现是实现“一种接口,多种方法一种接口,多种方法”的技术。的技术。nC+C+的多态性是指对的多态性是指对同一条同一条消息,被消息,被不同不同类型类型的对象接收将产生的对象接收将产生不同不同的行为。的行为。第3页,本讲稿共32页-多态性-4在在C+中有两中有两种多态种多态性性 编译时的多态性编译时的多态性 运行时的多运行时的多态性态性 运行时的多态
2、性是指在程序执行前,运行时的多态性是指在程序执行前,无法根据函数名和参数来确定该调用无法根据函数名和参数来确定该调用哪一个函数,必须在程序执行过程中,哪一个函数,必须在程序执行过程中,根据执行的具体情况来动态地确定。根据执行的具体情况来动态地确定。它是它是通过类继承关系和虚函数来实现的。通过类继承关系和虚函数来实现的。目的也是建立一种通用的程序目的也是建立一种通用的程序。通用性。通用性是程序追求的主要目标之一。是程序追求的主要目标之一。通过函数的重载和运算符通过函数的重载和运算符的重载来实现的。的重载来实现的。多态的类型第4页,本讲稿共32页-多态性-5联编 n多态性的实现过程中,确定调用哪个
3、同名函数的过程就是联编(binding),又称绑定。n联编是指计算机程序自身彼此关联的过程,也就是把一个标识符名和一个存储地址联系在一起的过程。用面向对象的术语讲,就是把一条消息和一个对象的方法相结合的过程。n按照联编进行的阶段的不同,可以分为静态联编和动态联编,这两种联编过程分别对应着多态性的两种实现方式。第5页,本讲稿共32页-多态性-6静态联编 n在在编译阶段编译阶段完成的联编称为静态联编。完成的联编称为静态联编。n在编译过程中,编译系统可以根据类型匹配等特征在编译过程中,编译系统可以根据类型匹配等特征来确定程序中调用操作与执行某个同名函数实现之来确定程序中调用操作与执行某个同名函数实现
4、之间的关系,即确定某一个同名函数到底是要调用间的关系,即确定某一个同名函数到底是要调用哪哪一段函数实现代码。一段函数实现代码。n函数重载和运算符重载就是通过静态联编方式实现函数重载和运算符重载就是通过静态联编方式实现的编译时的多态的体现。的编译时的多态的体现。n静态联编的优点是函数调用速度快、效率较高,缺点是静态联编的优点是函数调用速度快、效率较高,缺点是编程不够灵活编程不够灵活。第6页,本讲稿共32页-多态性-7动态联编 n只有在运行程序时才能确定将要调用的函数。只有在运行程序时才能确定将要调用的函数。这种在这种在运行阶段运行阶段进行的联编称为动态联编。进行的联编称为动态联编。动态多态性必须
5、存在于继承的环境之中。n动态联编的优点是提供了更好的编程灵活性、动态联编的优点是提供了更好的编程灵活性、问题抽象性和程序易维护性,缺点是与静态联问题抽象性和程序易维护性,缺点是与静态联编相比,函数调用速度慢。编相比,函数调用速度慢。第7页,本讲稿共32页-多态性-8虚函数 n虚函数是动态联编的基础。n在继承体系中,如果在派生类中要对所继承的成员函数重新定义其功能,该函数应在基类中被定义为虚函数。n虚函数是非静态的成员函数,经过派生之后,虚函数在类族中可以实现运行时的多态性。第8页,本讲稿共32页-多态性-9虚函数的声明 n虚函数是一个在某基类中声明为virtual并在一个或多个派生类中被重新定
6、义的成员函数。声明虚函数的格式如下:virtual virtual (););第9页,本讲稿共32页-多态性-10虚函数的使用(一)n虚函数仅适用于有继承关系的类对象,所以只有类的虚函数仅适用于有继承关系的类对象,所以只有类的成员函数才能说明为虚函数。成员函数才能说明为虚函数。n静态成员函数,是所有同一类对象共有,不受限于某静态成员函数,是所有同一类对象共有,不受限于某个对象,不能作为虚函数。个对象,不能作为虚函数。n内联函数每个对象一个拷贝,无映射关系,不能作为虚函数。内联函数每个对象一个拷贝,无映射关系,不能作为虚函数。第10页,本讲稿共32页-多态性-11虚函数的使用(二)n构造函数不能
7、被定义为虚函数。构造函数不能被定义为虚函数。n析构函数可以是虚函数。析构函数可以是虚函数。在基类中及其派生类中都在基类中及其派生类中都动态动态分配内存空间时,必须把析构函数定义为虚函数,实分配内存空间时,必须把析构函数定义为虚函数,实现撤消对象时的多态性。现撤消对象时的多态性。(这样,才有可能通过基类(这样,才有可能通过基类指针删除派生类对象,调用对象的析构函数撤消指针删除派生类对象,调用对象的析构函数撤消动态动态分配的内存空间分配的内存空间)第11页,本讲稿共32页-多态性-12虚函数的使用(三)n关键字关键字virtualvirtual指明该成员函数为虚函数。指明该成员函数为虚函数。如果如
8、果虚函虚函数数定义放在类外,定义放在类外,virtual只能加在函数声明前面只能加在函数声明前面。n派生类中定义虚函数必须与基类中的虚函数派生类中定义虚函数必须与基类中的虚函数同名、同名、同参数表、同返回类型,同参数表、同返回类型,只能修改只能修改函数体函数体内容内容。否则。否则被认为是重载,而不是虚函数。如被认为是重载,而不是虚函数。如基类中返回基类基类中返回基类指针,派生类中返回派生类指针是允许的指针,派生类中返回派生类指针是允许的,这是一个例,这是一个例外。外。第12页,本讲稿共32页-多态性-14纯虚函数 n在在C+C+中,有一个仅为多态机制提供一个接口而中,有一个仅为多态机制提供一个
9、接口而没有任何实体定义的函数,被称为纯虚函数。没有任何实体定义的函数,被称为纯虚函数。n纯虚函数纯虚函数是指被标明为不具体实现的虚拟成员是指被标明为不具体实现的虚拟成员函数。它用于这样的情况:定义一个基类时,函数。它用于这样的情况:定义一个基类时,会遇到无法定义基类中虚函数的具体实现,其会遇到无法定义基类中虚函数的具体实现,其实现依赖于不同的派生类。声明纯虚函数的一实现依赖于不同的派生类。声明纯虚函数的一般格式如下:般格式如下:virtual virtual ()=0)=0;第14页,本讲稿共32页-多态性-15纯虚函数 1 1、定义纯虚函数时,、定义纯虚函数时,不能定义虚函数的实现部分不能定
10、义虚函数的实现部分。即使是函。即使是函数体为空也不可以,函数体为空就可以执行,只是什么也数体为空也不可以,函数体为空就可以执行,只是什么也不做就返回。而不做就返回。而纯虚函数不能调用纯虚函数不能调用。2 2、“=0=0”表明程序员将不定义该函数,函数声明是为派生类保表明程序员将不定义该函数,函数声明是为派生类保留一个位置。留一个位置。“=0=0”本质上是将指向函数体的本质上是将指向函数体的指针定为指针定为NULLNULL。3 3、含有纯虚函数的基类是不能用来定义对象的。纯虚函数、含有纯虚函数的基类是不能用来定义对象的。纯虚函数没有实现部分,不能产生对象,所以含有纯虚函数的类没有实现部分,不能产
11、生对象,所以含有纯虚函数的类是抽象类。是抽象类。在派生类中必须有重新定义的纯虚函数的函数体,在派生类中必须有重新定义的纯虚函数的函数体,这样的派生类才能用来定义对象。这样的派生类才能用来定义对象。第15页,本讲稿共32页-多态性-16抽象类(一)n作用q抽象类为抽象和设计的目的而声明,将有关的数据和行为组织在一个继承层次结构中,保证派生类具有要求的行为。q对于暂时无法实现的函数,可以声明为纯虚函数,留给派生类去实现。n注意q抽象类只能作为基类来使用。q不能声明抽象类的对象。第16页,本讲稿共32页-多态性-17抽象类(二)n抽象类是为了抽象和设计的目的而建立的,主要作用是将有抽象类是为了抽象和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 16 多态性 优秀 课件
限制150内