西安电子科技大学:《C++程序设计语言》课程电子教案(PPT教学课件)第8章 多态性

8章多态性 H 第8章多态性 8.1多态性概述 8,2运算符重载 83虚函数 8.4抽象类 BACK
第8章 多态性 第8章 多态性 8.1 多态性概述 8.2 运算符重载 8.3 虚函数 8.4 抽象类

8章多态性 H 81多态性概述 所谓多态性是指同一个接口可以通过多种方法调 用,如图8-1所示。通俗地说,多态性是指用一个相同 的名字定义不同的函数,这些函数的执行过程不同, 但是有相似的操作,即用同样的接口访问不同的函数 比如,一个对象中有很多求两个数中最大值的行为, 虽然可以针对不同的数据类型,写很多不同名称的函 数来实现,但事实上,它们的功能几乎完全相同。这 时,就可以利用多态的特征,用统一的标识来完成这 些功能
第8章 多态性 8.1 多态性概述 所谓多态性是指同一个接口可以通过多种方法调 用,如图8-1所示。通俗地说,多态性是指用一个相同 的名字定义不同的函数,这些函数的执行过程不同, 但是有相似的操作,即用同样的接口访问不同的函数。 比如,一个对象中有很多求两个数中最大值的行为, 虽然可以针对不同的数据类型,写很多不同名称的函 数来实现,但事实上,它们的功能几乎完全相同。这 时,就可以利用多态的特征,用统一的标识来完成这 些功能

8章多态性 H 用户 单一接口名称 方法1 方法n 图8-1多态性为用户提供单一接口示意图
第8章 多态性 图8-1 多态性为用户提供单一接口示意图

H 8章多态性 面向对象的多态性从实现的角度来讲,可以分为 静态多态性和动态多态性两种。静态多态性是在编译 的过程中确定同名操作的具体操作对象的,而动态多 态性则是在程序运行 过程中动态地确定操作所针对的具体对象的。这 种确定操作具体对象的过程就是联编( binding),也称为 绑定。联编是指计算机程序自身彼此关联的过程。也 就是把一个标识符名和一个存储地址联系在一起的过 程。用面向对象的术语讲,就是把一条消息和一个对 象的方法相结合的过程
第8章 多态性 面向对象的多态性从实现的角度来讲,可以分为 静态多态性和动态多态性两种。静态多态性是在编译 的过程中确定同名操作的具体操作对象的,而动态多 态性则是在程序运行 过程中动态地确定操作所针对的具体对象的。这 种确定操作具体对象的过程就是联编(binding),也称为 绑定。联编是指计算机程序自身彼此关联的过程。也 就是把一个标识符名和一个存储地址联系在一起的过 程。用面向对象的术语讲,就是把一条消息和一个对 象的方法相结合的过程

8章多态性 H 所谓消息,是指对类的成员函数的调用。不同的 方法是指不同的实现,也就是调用了不同的函数。按 照联编进行阶段的不同,联编方法可以分为两种:静 态联编和动态联编。这两种联编过程分别对应着多态 的两种实现方式。联编工作在编译连接阶段完成的情 况称为静态联编。在编译、连接过程中,系统就可以 根据类型匹配等特征确定程序中操作调用与执行该操 作的代码的关系,即确定某一个同名标识到底是要调 用哪一段程序代码。函数重载和运算符重载就属于静 态多态性
第8章 多态性 所谓消息,是指对类的成员函数的调用。不同的 方法是指不同的实现,也就是调用了不同的函数。按 照联编进行阶段的不同,联编方法可以分为两种:静 态联编和动态联编。这两种联编过程分别对应着多态 的两种实现方式。联编工作在编译连接阶段完成的情 况称为静态联编。在编译、连接过程中,系统就可以 根据类型匹配等特征确定程序中操作调用与执行该操 作的代码的关系,即确定某一个同名标识到底是要调 用哪一段程序代码。函数重载和运算符重载就属于静 态多态性

8章多态性 H 和静态联编相对应,如果联编工作在程序运行阶段 完成,则称为动态联编。在编译、连接过程中无法解决 的联编问题,要等到程序开始运行之后再来确定。例如, 本章将要介绍的虚函数就是通过动态联编完成的 函数重载在函数及类的章节中曾做过详细的讨论, 所以在本章中,静态多态性主要介绍运算符重载;对于 动态多态性,将对虚函数作详细介绍。 BACK
第8章 多态性 和静态联编相对应,如果联编工作在程序运行阶段 完成,则称为动态联编。在编译、连接过程中无法解决 的联编问题,要等到程序开始运行之后再来确定。例如, 本章将要介绍的虚函数就是通过动态联编完成的。 函数重载在函数及类的章节中曾做过详细的讨论, 所以在本章中,静态多态性主要介绍运算符重载;对于 动态多态性,将对虚函数作详细介绍

8章多态性 H 8.2运算符重载 C艹中预定义的运算符的操作对象只能是基本数据 类型。实际上,对于很多用户自定义的类型(如类),也 需要有类似的运算操作。例如,下面的程序声明了一个 点类 point classpoint / point类声明 private intx
第8章 多态性 8.2 运算符重载 C++中预定义的运算符的操作对象只能是基本数据 类型。实际上,对于很多用户自定义的类型(如类),也 需要有类似的运算操作。例如,下面的程序声明了一个 点类point。 classpoint //point类声明 { private: intx,y;

8章多态性 H public ∥构造函数 point(intxx-=0, intyy-=OxXX; y=yy intet XO ∥示x值 intet yo 显示y值
第8章 多态性 public: //构造函数 point(intxx=0,intyy=0){x=xx;y=yy;} intget_x(); //显示x值 intget_y(); //显示y值 //... };

8章多态性 H 于是我们可以这样声明点类的对象: pointpl(l, 1),p2(3, 3) 如果我们需要对pl和p2进行加法运算,该如何实 现呢?我们当然希望能使用“+〃运算符,写出表达式 “pl+p2〃,但是编译的时候却会出错,因为编译器不 知道该如何完成这个加法。这时候,我们就需要自己 编写程序来说明“+″在作用于 point类对象时,该实现 什么样的功能,这就是运算符重载。运算符重载是对 已有的运算符赋予多重含义,使同一个运算符作用于 不同类型的数据时,导致不同类型的行为
第8章 多态性 于是我们可以这样声明点类的对象: pointp1(1,1),p2(3,3) 如果我们需要对p1和p2进行加法运算,该如何实 现呢?我们当然希望能使用“+”运算符,写出表达式 “ p1+p2” ,但是编译的时候却会出错,因为编译器不 知道该如何完成这个加法。这时候,我们就需要自己 编写程序来说明“+”在作用于point类对象时,该实现 什么样的功能,这就是运算符重载。运算符重载是对 已有的运算符赋予多重含义,使同一个运算符作用于 不同类型的数据时,导致不同类型的行为

8章多态性 H 在运算符重载的实现过程中,首先把指定的运算表达 式转化为对运算符函数的调用,运算对象转化为运算 符函数的实参,然后,根据实参的类型来确定需要调 用的函数。这个过程是在编译过程中完成的
第8章 多态性 在运算符重载的实现过程中,首先把指定的运算表达 式转化为对运算符函数的调用,运算对象转化为运算 符函数的实参,然后,根据实参的类型来确定需要调 用的函数。这个过程是在编译过程中完成的
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 西安电子科技大学:《C++程序设计语言》课程电子教案(PPT教学课件)第7章 继承与派生.ppt
- 西安电子科技大学:《C++程序设计语言》课程电子教案(PPT教学课件)第6章 指针与字符串.ppt
- 西安电子科技大学:《C++程序设计语言》课程电子教案(PPT教学课件)第5章 程序结构.ppt
- 西安电子科技大学:《C++程序设计语言》课程电子教案(PPT教学课件)第4章 类和对象.ppt
- 西安电子科技大学:《C++程序设计语言》课程电子教案(PPT教学课件)第3章 数组.ppt
- 西安电子科技大学:《C++程序设计语言》课程电子教案(PPT教学课件)第2章 函数.ppt
- 西安电子科技大学:《C++程序设计语言》课程电子教案(PPT教学课件)第1章 C++简单程序设计.ppt
- 西安电子科技大学:《C++程序设计语言》课程电子教案(PPT教学课件)第11章 Visual C++环境下Windows.ppt
- 西安电子科技大学:《C++程序设计语言》课程电子教案(PPT教学课件)第10章 异常处理.ppt
- 西安电子科技大学:《C++程序设计语言》课程电子教案(PPT教学课件)目录 The C++ programming language(主讲:揣锦华).ppt
- 《软件形式化方法》期末考试模拟试题一.doc
- 《高质量C++编程指南》PDF电子资料(2001,v1.0,共十一章,林锐).pdf
- 《数据库自测试题》模拟试题一(附答案).doc
- 海南大学:《计算机电子电路技术—电路与模拟电子部分》谐振电路.ppt
- 海南大学:《计算机电子电路技术—电路与模拟电子部分》分析习题.doc
- 海南大学:《计算机电子电路技术—电路与模拟电子部分》第11章 直流电源.ppt
- 海南大学:《计算机电子电路技术—电路与模拟电子部分》复习.ppt
- 海南大学:《计算机电子电路技术—电路与模拟电子部分》习题.doc
- 海南大学:《计算机电子电路技术—电路与模拟电子部分》第8章 集成运算放大器.ppt
- 海南大学:《计算机电子电路技术—电路与模拟电子部分》第7章 负反馈放大电路.ppt
- 西安电子科技大学:《C++程序设计语言》课程电子教案(PPT教学课件)第9章 流类库与输入输出.ppt
- 深圳职业技术学院:《C语言程序设计》第一单元 C 语言的数据类型、运算符和表达式(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第十单元 链表(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第十一单元(1):文本文件的操作(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第十一单元(2):二进制文件的操作(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第十一单元(3):文件的定位操作和随即读写(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第二单元:顺序结构程序设计(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第三单元:选择结构程序设计(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第四单元:循环结构程序设计(1)(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第四单元(2):循环结构编程实训(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第五单元(1):数组的基础内容(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第五单元(2):数组的应用(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第五单元(3):数组的编程实训(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第五单元(4):二维数值型数组(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第五单元(5):字符型数组(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第五单元(6):字符数组的编程实训(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第五单元(7):二维字符数组(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第 5 单元(8):数组编程总结(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第五单元:数组(乌云高娃).pdf
- 深圳职业技术学院:《C语言程序设计》第六单元(1):函数基础(乌云高娃).pdf