- 1、本文档共32页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
--- 多态性 --- * 运算符重载为友元函数 双目运算符 B重载为友元函数后,表达式oprd1 B oprd2 等同于按以下方式调用函数 : operator B(oprd1,oprd2 ) --- 多态性 --- * 课外作业 类的继承与多态:定义一个Point类,该类有点的坐标值x,y的属性;设置、获取、输出属性值的功能;作为多个图形类的基类,还预留有计算图形面积的功能接口。定义Point类的两个派生类:Rectangle类和Circle类。Rectangle类有新属性是矩形的长和宽,它从Point类继承的属性x、y是矩形的左上角顶点的坐标;Circle类有新属性是圆的半径,它从Point类继承的属性x、y是圆心的坐标; Rectangle类和Circle类的新功能是设置、获取、输出新属性和计算并返回图形面积。编程序,定义以上类,定义类的对象,分别求矩形和圆的面积。 第十六章 多态性 --- 多态性 --- * 主要内容 多态性的概念和多态类型 联编 虚函数 抽象类 运算符重载 * --- 多态性 --- * 多态性的概念 多态性是面向对象程序设计的重要特征之一,是实现“一种接口,多种方法”的技术。 C++的多态性是指对同一条消息,被不同类型的对象接收将产生不同的行为。 --- 多态性 --- * 在C++中有两种多态性 编译时的多态性 运行时的多态性 运行时的多态性是指在程序执行前,无法根据函数名和参数来确定该调用哪一个函数,必须在程序执行过程中,根据执行的具体情况来动态地确定。它是通过类继承关系和虚函数来实现的。目的也是建立一种通用的程序。通用性是程序追求的主要目标之一。 通过函数的重载和运算符的重载来实现的。 多态的类型 --- 多态性 --- * 联编 多态性的实现过程中,确定调用哪个同名函数的过程就是联编(binding),又称绑定。 联编是指计算机程序自身彼此关联的过程,也就是把一个标识符名和一个存储地址联系在一起的过程。用面向对象的术语讲,就是把一条消息和一个对象的方法相结合的过程。 按照联编进行的阶段的不同,可以分为静态联编和动态联编,这两种联编过程分别对应着多态性的两种实现方式。 --- 多态性 --- * 静态联编 在编译阶段完成的联编称为静态联编。 在编译过程中,编译系统可以根据类型匹配等特征来确定程序中调用操作与执行某个同名函数实现之间的关系,即确定某一个同名函数到底是要调用哪一段函数实现代码。 函数重载和运算符重载就是通过静态联编方式实现的编译时的多态的体现。 静态联编的优点是函数调用速度快、效率较高,缺点是编程不够灵活 。 --- 多态性 --- * 动态联编 只有在运行程序时才能确定将要调用的函数。这种在运行阶段进行的联编称为动态联编。动态多态性必须存在于继承的环境之中。 动态联编的优点是提供了更好的编程灵活性、问题抽象性和程序易维护性,缺点是与静态联编相比,函数调用速度慢。 --- 多态性 --- * 虚函数 虚函数是动态联编的基础。 在继承体系中,如果在派生类中要对所继承的成员函数重新定义其功能,该函数应在基类中被定义为虚函数。 虚函数是非静态的成员函数,经过派生之后,虚函数在类族中可以实现运行时的多态性。 --- 多态性 --- * 虚函数的声明 虚函数是一个在某基类中声明为virtual并在一个或多个派生类中被重新定义的成员函数。声明虚函数的格式如下: virtual 返回值类型 函数名(参数表); --- 多态性 --- * 虚函数的使用(一) 虚函数仅适用于有继承关系的类对象,所以只有类的成员函数才能说明为虚函数。 静态成员函数,是所有同一类对象共有,不受限于某个对象,不能作为虚函数。 内联函数每个对象一个拷贝,无映射关系,不能作为虚函数。 --- 多态性 --- * 虚函数的使用 (二) 构造函数不能被定义为虚函数。 析构函数可以是虚函数。在基类中及其派生类中都动态分配内存空间时,必须把析构函数定义为虚函数,实现撤消对象时的多态性。(这样,才有可能通过基类指针删除派生类对象,调用对象的析构函数撤消动态分配的内存空间) --- 多态性 --- * 虚函数的使用 (三) 关键字virtual指明该成员函数为虚函数。如果虚函数定义放在类外,virtual只能加在函数声明前面。 派生类中定义虚函数必须与基类中的虚函数同名、同参数表、同返回类型,只能修改函数体内容。否则被认为是重载,而不是虚函数。如基类中返回基类指针,派生类中返回派生类指针是允许的,这是一个例外。 --- 多态性 --- * 虚函数的使用 (四) 当某一个类的一个成员函数被定义为虚函数,则由该类派生出来的所有派生类中,该函数始终保持虚函数的特征。 实现动态多态性时,必须
文档评论(0)