西安石油大学大二(上)C++面向对象程序设计课件chapter6.ppt

西安石油大学大二(上)C++面向对象程序设计课件chapter6.ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西安石油大学大二(上)C面向对象程序设计课件chapter6

第6章 运行时的多态性和抽象类 主要内容 面向对象的重要特征:多态性 运行时的多态性 抽象类 设计举例 6.1 面向对象的重要特征:多态性 问题引入 例子: 每年在加薪的时候,调用所有雇员的服务 PayRaise(),包括行政人员。 行政人员的加薪计算应该与其余雇员不同。 6.1 面向对象的重要特征:多态性 面向对象技术使用什么样的机制处理? 每当请求行政人员的该服务时,子类“行政人员”有一个代替雇员的PayRaise方法的方法。 尽管这些方法是不同的,但它们完成相同的业务目的,把这种现象称为多态。 所调用的方法依赖对象所属的类。 6.1 面向对象的重要特征:多态性 多态性 多态性指同一个消息被不同类型的对象或相同类型的对象接收时产生不同的行为。 通俗地说,多态性是指用一个名字定义不同的函数,这些函数执行不同却类似的接口、多种方法。即用同样的接口访问功能不同的函数,从而实现多态性。 6.1 面向对象的重要特征:多态性 多态性的分类 重载多态性:函数重载和运算符重载 继承多态性:派生类 运行时的多态性:是包含多态性的动态体现 参数多态性:模板 强制多态性:类型转换 6.2 运行时的多态性 虚函数和运行时的多态性 基本概念 虚函数 C++语言中,前边标有关键字virtual的成员函数称做虚函数。 C++语言实现运行时的多态性的方法是使用虚函数。 动态绑定的标记是虚函数标记virtual。 6.2 运行时的多态性 虚函数和运行时的多态性 基本概念 运行时的多态性 指对一个类层次来说,同样一个成员函数的调用,如果程序中动态确定的对象不同,则调用结果不同。 指系统在运行时才具体确定对象所属类层次中的某个类,从而确定外部程序所发消息的匹配对象。 运行时的多态性与类的继承和虚函数有关,虚函数允许函数调用与函数体之间的联系在运行时才建立,即所谓的“动态链接”。 6.2 运行时的多态性 虚函数和运行时的多态性 虚函数的格式和使用方法 在基类中声明虚函数的语句格式为: virtual 成员函数原型; 基类定义的虚函数在派生类中被覆盖 虚函数在派生类中被覆盖,即保持函数原型不变,并且参数个数和参数类型完全相同。 否则等同于普通函数的覆盖,就不能实现动态绑定,也就不能实现运行时的多态性。 派生类覆盖时关键字virtual可以省略。 6.2 运行时的多态性 虚函数和运行时的多态性 虚函数的使用方法 设计一个类层次,并在类层次中定义一个或一个以上的虚函数。 在外部程序中定义基类的指针。 按照赋值兼容规则,程序中既可以把基类对象的地址(或指针值)赋给基类的指针,也可以把派生类对象的地址赋给基类的指针。 6.2 运行时的多态性 虚函数和运行时的多态性 虚函数的使用方法 当外部程序发送的消息是虚函数时,若此时基类指针指向基类的对象时,系统就调用基类中的成员函数;若此时基类指针指向派生类对象时,系统就调用派生类中的成员函数。 如果没有按照上述的方法在程序中动态改变基类的指针,则系统将按静态绑定方式调用基类的成员函数。 6.2 运行时的多态性 虚函数和运行时的多态性 例: 6.2 运行时的多态性 虚函数和运行时的多态性 例:虚函数举例,计算三角形、矩形和圆的面积。 6.2 运行时的多态性 6.2 运行时的多态性 6.2 运行时的多态性 说明: 虽然三个类计算面积的方法不同,但具有相同的界面接口:show_area(),显示了C++的“同一接口,多种方法”的多态性机制。 应用程序不必为每一个派生类编写功能调用。即“以不变应万变”,可大大提高程序的可复用性。 6.2 运行时的多态性 动态绑定 绑定(或联编) 绑定指的是将一个过程调用与相应代码链接起来的行为。 对一个函数调用,要在编译时或在运行时确定将链接上相应的函数体的代码,这一过程称为函数绑定。 C++的两种绑定方式 静态绑定(或早期联编) 动态绑定(或滞后联编) 6.2 运行时的多态性 动态绑定 静态绑定 静态绑定是指在程序编译连接阶段进行的绑定。传统的程序设计语言采用的都是静态绑定。 静态绑定支持的多态性称为编译时的多态性,也称静态多态性。 主要优点 执行速度快,效率高。(运行时开销仅仅是传递参数、执行函数调用、清除栈等)。 6.2 运行时的多态性 动态绑定 动态绑定 在面向对象的语言中,绑定是把每一条消息和相应对象的方法相结合。 动态绑定是指系统在运行时才根据当时具体的取值确定具体的对象,从而匹配基类或派生类中的某个虚函数。 主要优点 提供了更好的灵活性、高度问题抽象性和程序易维护性。 6.2 运行时的多态性 动态绑定 动态绑定 动态绑定支持的多态性称为运行时的多态性。 实现动态绑定机制的条件 以公有继承为基础; 以虚函数为不同编译方法标记; 在一般函数中

文档评论(0)

yaocen + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档