网站大量收购闲置独家精品文档,联系QQ:2885784924

CPP课件第8章多态性虚函数.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《C++面向对象程序设计》教学内容 第1章 C++概述 第2章 类和对象 第3章 面向对象程序设计概述 第4章 进一步学习类和对象 第5章 堆与复制构造函数 第6章 继承性:派生类 第7章 运算符重载 第8章 虚函数和多态性 第9章 模板 第10章 类库和C++的标准模板库STL 第11章 输入输出流 第12章 异常处理 第8章 多态性与虚函数 8.1 多态性概述 8.2 静态联编和动态联编 8.3 虚函数 8.4 纯虚函数和抽象类 8.5 应用举例 面向对象程序设计的特征 抽象性(Abstraction) 封装性(Encapsulation) 继承性(Inheritance) 多态性(Polymorphism) 8.1 多态性概述 polymorphism,“many forms”:即多种形态 在自然语言中,多态性即是“一词多义”; 更准确地说,多态性是指相同的动词作用到不同类型的对象上, 例如: 驾驶摩托车 驾驶汽车 驾驶飞机 驾驶轮船 驾驶宇宙飞船 什么是多态性?(OOP) 当不同对象接受到相同的消息产生不同的动作,这种性质称为多态性。 通俗地说,多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作, 即用同样的接口访问功能不同的函数,从而实现“一个接口,多种方法”。 多态性的例子 在C语言中,由于不支持多态,求绝对值的动作要求三个不同的函数名字: abs(), labs(),fabs() 分别用来求整数,长整数、浮点数的绝对值。 在C++语言中,由于支持多态,求绝对值的动作可以只用一个函数名: abs() 面向对象程序设计的精华 通过一个简单的接口对不同的实现进行概念上的简化。 class walkman{ virtual void on( )=0; virtual void off( )=0; virtual void play( )=0; virtual void record( )=0; virtual void stop( )=0; }; Cassette player, CD player, MD player, MP3 player; 应用多态性的好处 多态应用于OOP的目的是允许用一个名字来指定动作的一般类(即逻辑上相似的动作)。 从而带来以下的好处: 提高了处理问题的抽象级别; 降低了程序设计时的复杂性; (程序员只需记住一个接口,而不是好几个。) C++实现的多态性 编译时多态性: 函数重载 运算符重载 模板 运行时多态性: 借助虚函数来获得 8.2 静态联编和动态联编 什么叫联编(Binding)? 一个源程序需要经过编译、连接,才能成为可执行代码。 上述过程中需要将一个函数调用链接上相应的函数代码,这一过程称为联编。 联编的目的是要建立函数调用与函数体之间的联系, 即将一个函数调用连接到一函数的入口地址。 C++支持两种联编 静态联编:在程序被编译时进行联编;(早联编) 程序执行快,但灵活性较小。 动态联编:在程序运行时联编。(晚联编,滞后联编) 灵活性高,程序执行慢。 动态联编是C++实现运行时多态性的关键因素。 8.3 虚函数 virtual float area( ){ return -1;} virtual 关键字的作用:指示C++编译器对该函数的调用进行动态联编。 虚函数的定义 冠以关键字virtual的成员函数称为虚拟函数,简称虚函数。 说明虚函数的方法如下: virtual 类型说明符 函数名 ( 参数表 ) 虚函数是成员函数,而且是非static的成员函数。 包含虚函数的类被称为多态类。 虚函数是动态联编的基础 virtual 关键字的作用:指示C++编译器对该函数的调用进行动态联编。 尽管可以用对象名和点算符的方式调用虚函数,即向对象发送消息: tri.area( ) 或者 rect.area( ) 这时是静态联编方式。 只有当访问虚函数是通过基类指针s时才可获得运行时的多态性。 虚函数与重载函数的比较 1.从形式上说,重载函数要求函数有相同的函数名称,并有不同的参数序列; 2.重载函数可以是成员函数和非成员函数; 而虚函数要求这三项(函数名称、返回值和参数序列)完全相同,即具有完全相同的函数原型。 而虚函数只能是成员函数。 虚函数与重载函数的比较(续) 3.对重载函数的调用是以所传递参数序列的差别(参数个数或类型的不同)作为调用不同函数的依据; 虚拟函数是根据对象的不同去调用不同类的虚拟函数。 虚函数小结 如果某类中的一个成员函数被说明为虚函数,这就意味着该成员函

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档