第5篇-多态性_V2.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章 多态性 内容提要 1 多态性的概念 1)多态性的概念 2)多态性的实现原理* 3)静态绑定与动态绑定 2 函数重载 1)普通函数重载 2)类的成员函数重载 3)名字修饰 内容提要(续) 3 运算符重载 1)运算符重载 2)一般运算符函数(友元) 3)成员运算符重载 4)调用方式 5)运算符重载使用说明 内容提要(续) 4 虚函数* 1)虚函数的概念 2)虚函数的定义和使用 3)继承中的虚函数* 4)纯虚函数和抽象类* §5.1. 多态性的概念 1 多态性的概念 多态性是面向对象系统的重要特征之一 多态性——指发出同样的消息被不同类型的对象接收时有不同的行为的现象 多态提高了软件的可重用性和可扩充性 1 多态性的概念(续) C++中,多态表现为一个名字定义不同的函数,这些函数执行不同但相似的操作,即用同样的接口访问功能不同的函数,从而可以实现“一个接口,多种方法” C++多态的实现: 函数重载 运算符重载 虚函数 2 多态性的实现原理 多态性实现和编译连接、执行密切相关 C++源程序中函数的经过编译后形成不同的目标代码块(OBJ等),这些代码和库要进行连接形成最终代码(EXE等) 目标代码中函数调用处含有连接信息 连接信息含有被调用函数的地址,若地址固定就成为静态地址值;若地址不固定就是指针变量(函数指针) 2 多态性的实现原理(续) 图例说明多态的实现 2 多态性的实现原理(续) 编译后连接信息中函数地址值固定不变,在此基础上实现的多态称为静态多态 C++中,静态多态表现为函数重载和运算符重载(特殊的函数重载) 编译后连接信息中函数地址值用指针指向,在此基础上实现的多态称为动态多态 C++中,动态多态是通过虚函数实现的 3 静态绑定与动态绑定 绑定 程序中的操作(函数)调用与执行该操作的代码关联过程称为绑定。 静态绑定(编译时) 绑定过程出现在编译阶段,用对象名或者类名来限定要调用的函数。 动态绑定(运行时) 绑定过程在程序运行时执行,在程序运行时才确定将要调用的函数(指针指向)。 §5.2. 函数重载 1 普通函数重载 函数名相同,但返回类型、参数类型和顺序不尽相同的现象 普通函数重载 void Add(int) { //…… } void Add(char) { //…… } void Add(short) { //…… } 2 类的成员函数重载 成员函数的重载有两种情况: 1)一种是参数有所差别的重载,这和普通函数的重载规则一样 2)另一种是函数所带的参数完全相同,但要求他们属于不同的类(或名字空间),特别是在类的继承关系中 成员函数因为含有类的this指针参数,所以自然就可以相互区分开 2 类的成员函数重载(续) 继承中函数重载示例 3 名字修饰 C++编译器对函数进行编译时,使用名字修饰技术,对函数处理后形成内部名 名字修饰技术把函数名和参数类型综合起来,形成内部名称(目标代码中) 比如(相似的理解): int Add(int); Add_INT void Add(int, char); Add_INT_CHAR §5.3. 运算符重载 1 运算符重载 实质:一种特殊的函数重载 作用:扩展了C++的类型机制 分为一般运算符重载和类成员运算符重载 一般格式: 返回类型 operator 运算符名(参数表) { //…… } 其中operator是关键词,“operator运算符”相当于函数名 1 运算符重载(续) 运算符重载是对已有运算符赋予多重含义 必要性 预定义运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类) 实现机制 运算表达式将转化为对运算符函数的调用,运算对象转化为运算符函数的实参 编译系统对重载运算符的选择,遵循函数重载的选择原则(参数类型匹配) 1 运算符重载(续) 可以重载的运算符 单目: - + ! ~ ++ -- 等 双目: + - * / % 等 其他:[] - () = += new delete等 不可以重载的运算符: . * :: ?: sizeof(5个) 2 一般运算符重载示例 2 一般运算符重载示例(续) 3 成员运算符重载 运算符重载目的是为了满足新类型(类)的运算需要 根据封装和隐藏原理的要求,类中的数据成员一般为私有,所以大部分的一般运算符都重载为友元运算符 另外一种重载方法是把运算符放在类中,成为成员运算符 3 成员运算符重载(续) 示例 3 成员运算符重载(续)

文档评论(0)

xiaofei2001128 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档