面向对象程序设计PPT课件

面向对象程序设计PPT课件

ID:43652975

大小:277.31 KB

页数:62页

时间:2019-10-11

面向对象程序设计PPT课件_第1页
面向对象程序设计PPT课件_第2页
面向对象程序设计PPT课件_第3页
面向对象程序设计PPT课件_第4页
面向对象程序设计PPT课件_第5页
资源描述:

《面向对象程序设计PPT课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、《面向对象程序设计》第5章多态与抽象类内容提要5.1类层次的多态问题5.2类型兼容规则(重点)5.3多态的概念5.4多态的分类5.5联编5.6虚函数(重点)5.7抽象类与纯虚函数(重点)7/17/20212第5章多态与抽象类提出问题【例5-1】在例4-1程序中存在的两个不足:(1)基类Pay()和Display()的函数体均为空,在实现部分仍要写出函数体,显得冗余。(2)在主函数中,建立了4个不同类的对象,进行了类似的操作,重复写了4遍类似的语句,程序不够简洁。7/17/20213第5章多态与抽象类分析问题基类设置成员函数Pay()和Display()的目的是为了统一规定类簇的基本

2、行为,虽有冗余,但也必要。为此,C++提供了纯虚函数来解决此问题。7/17/20214第5章多态与抽象类在主函数中建立了4个不同类的对象,进行了类似的操作,重复写了4遍类似的语句。应该怎样有效地来处理它们同样的行为呢?我们首先想到的是用循环解决,但调用这些同名函数的对象却不相同。分析这些对象有一个共同点,那就是来自于同一个基类,而基类与派生类对象有什么关系呢?事实上,它们遵循类型兼容规则。7/17/20215第5章多态与抽象类Employee*emp[4]={&m1,&t1,&s1,&sm1};//声明抽象类指针数组for(inti=0;i<4;i++){emp[i]->Pay()

3、;//单一指令,实现多态,计算指针指向对象的工资emp[i]->Display();//单一指令,实现多态,输出指针指向对象的信息}7/17/20216第5章多态与抽象类5.2类型兼容规则类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。7/17/20217第5章多态与抽象类通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。7/17/20218第5章多态与抽象类类型兼容规则中所指替代包括以下情况:(1)派生类的对象可以赋值给基类的对象。(2)派生类的对

4、象可以初始化基类的引用。(3)派生类的对象的地址可以赋值给基类的指针变量。在替代之后,派生类对象就可以作为基类的对象使用,但只能访问从基类继承的成员。7/17/20219第5章多态与抽象类【例5-3】示例类型兼容规则的应用。教材P261,该程序的运行结果为:BaseclassBaseclassBaseclassDerivelclassDerive2class7/17/202110第5章多态与抽象类根据类型兼容规则,基类指针p可以指向派生类对象obj2、obj3(即派生类对象可以代替基类对象,给基类指针赋值),但编译时,编译器根据p的类型是基类型,自动调用基类的who(),所以结果如

5、上所示。7/17/202111第5章多态与抽象类【思考题5-3】如果基类指针要访问派生类的who(),怎么办?C++提供了多态机制来解决这个问题。类型兼容规则是C++多态的重要基础。7/17/202112第5章多态与抽象类多态多态(Polymorphism)是指具有相似功能的不同函数使用同一个名称来实现,从而可以使用相同的调用方式来调用这些具有不同功能的同名函数的特性。7/17/202113第5章多态与抽象类5.4多态的分类C++支持的多态可以分为四种类型:重载多态:函数重载和运算符重载强制多态:强制类型转换包含多态:虚函数参数多态:函数模板和类模板7/17/202114第5章多态

6、与抽象类联编联编是指把一个标识符名和一个存储地址联系在一起的过程。即函数调用与某个函数在多态的实现过程中,确定调用哪个同名联系的过程,又称绑定。分为:静态联编动态联编7/17/202115第5章多态与抽象类静态联编是在编译阶段完成的联编。例5-2、例5-3及以前的函数重载都是采用静态联编方式。例5-4,教材P265,是静态联编。动态联编是在运行阶段完成的联编。7/17/202116第5章多态与抽象类在例5-4中,静态联编把基类指针ps指向的对象绑定到基类上,而在运行时进行动态联编将把ps指向的对象绑定到派生类上。7/17/202117第5章多态与抽象类可见,同一个指针,在不同阶段被

7、绑定的类对象将是不同的,进而被关联的类成员函数也是不同的。如何来确定是用静态联编还是用动态联编呢?C++规定,动态联编通过继承和虚函数来实现。7/17/202118第5章多态与抽象类虚函数是动态联编的基础。下面介绍虚函数。7/17/202119第5章多态与抽象类5.6虚函数虚函数就是在基类中被关键字virtual说明、并在一个或多个派生类中被重新定义的成员函数。7/17/202120第5章多态与抽象类声明虚函数的格式如下:virtual<函数值类型><函数名>(<参数

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。