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

面向对象程序设计(八)-20110529-0-HB.ppt

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

面向对象程序设计 广西师范大学 何冰 hebing@ 第八章 多态性 8.1 多态性概述 8.2 运算符重载 8.3 虚函数 8.4 纯虚函数和抽象类 8.5 程序应用实例 8.6 小结 8.1 多态性概述 多态性 是指同样的消息被不同的对象接收时导致的不同行为。 消息是指对类的成员函数的调用; 不同的行为是指不同的实现,也就是调用了不同的函数。 8.1 多态性概述 多态性的实质 反映的是类与类之间的层次关系及类自身成员函数之间的关系,解决的是类的功能和行为的再抽象问题。 多态性是用统一的成员函数名来标识同一个类的或类体系的几乎相同或相近的行为和功能,进而达到统一标识,减少程序中标识符的个数。因此我们说,多态性是对类的特定成员函数的再抽象。 多态性可以使用相同的调用方式来调用这些具有不同功能的同名函数,“一个接口,多种方法” 8.1 多态性概述 多态性的分类 编译时的多态性 重载多态 强制多态 参数多态 运行时的多态性 包含多态 8.1 多态性概述 多态性的分类 重载多态 功能相近的不同函数使用同一函数名。包括普通的函数重载、类的成员函数重载和运算符重载。 强制多态 是通过语义操作把一个变元的类型加以变化,以符合一个函数或操作的要求,即强制类型转换。 参数多态 参数多态是指一个可参数化的类模板中包含的操作所涉及的类型必须用类型参数实例化。这样类模板的实例化的各个类都具有相同的操作,而操作的对象的类型却各不相同。 包含多态 包含多态是研究类体系中定义于不同类型中的同名成员的多态行为,主要通过虚函数来实现。 8.1 多态性概述 多态性的实现 将一个函数调用连接上相应的函数体的代码的过程,称为(函数)联编。 联编工作在编译连接阶段完成的称为静态联编,或前期联编 联编工作在运行阶段完成的称为动态联编,或后期联编 8.1 多态性概述 多态性的实现 静态联编特点 要求在程序编译时就知道调用函数的全部信息 调用速度快,效率高 动态联编特点 到程序运行时才能确定调用哪个函数 灵活性好、问题抽象性和程序易维护性 静态联编支持的多态称为编译时的多态,也称为静态多态性 动态联编支持的多态性称为运行时的多态,也称动态多态性 8.2 运算符重载 问题举例——复数的运算 class complex //复数类声明 { public: complex(double r=0.0,double i=0.0){real=r;imag=i;} //构造函数 void display( ); //显示复数的值 private: double real; double imag; }; 用“+”、“-”能够实现复数的加减运算吗? 实现复数加减运算的方法——重载“+”、“-”运算符 8.2 运算符重载 运算符重载是对已有的运算符赋予多重含义,同一个运算符作用于不同类型的数据导致不同类型的行为——实质就是函数重载 必要性 C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类) 实现机制 将指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参 编译系统根据实参的类型来对重载运算符函数进行选择,遵循函数重载的选择原则 8.2 运算符重载 运算符重载的规则 可以重载C++中除下列运算符外的所有运算符:”.”、”*”、“::”、 “sizeof”、 “?:” 只能重载C++语言中已有的运算符,不可臆造新的 不改变原运算符的优先级和结合性 不能改变操作数个数 经重载的运算符,其操作数中至少应该有一个是自定义类型 8.2 运算符重载 运算符重载的两种形式 重载为类的非静态成员函数 声明形式 返回类型 operator 运算符(形参) { ...... } 8.2 运算符重载 运算符重载的两种形式 重载为类的非成员(或友元)函数 声明形式 friend 返回类型 operator 运算符(形参) { ...... } 重载为类非静态成员函数时,参数个数=原操作数个数-1 (后置++、--除外) 重载为非成员函数时,参数个数=原操作数个数 8.2 运算符重载 运算符重载为非静态成员函数 双目运算符 一个操作数是对象本身的数据,由this指针指出 一个操作数通过运算符重载函数的参数表传递 单目运算符 操作数由对象的this指针给出,不再需要任何参数 前置单目运算符函数与后置单目运算符函数有所区别

文档评论(0)

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

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

1亿VIP精品文档

相关文档