第17讲(继承与派生).doc

第17讲(继承与派生).doc

ID:28758620

大小:34.00 KB

页数:7页

时间:2018-12-14

第17讲(继承与派生).doc_第1页
第17讲(继承与派生).doc_第2页
第17讲(继承与派生).doc_第3页
第17讲(继承与派生).doc_第4页
第17讲(继承与派生).doc_第5页
资源描述:

《第17讲(继承与派生).doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、第17讲教学内容7.1类的继承与派生7.1.1继承与派生实例7.1.2派生类的定义7.1.3派生类的生成过程7.2访问控制7.2.1公有继承7.2.2私有继承7.2.3保护继承教学重点和难点1什么叫继承?继承的作用?2派生类的声明方式3三种继承方式下的访问控制的理解教学方法:通过举实际生活中的例子,讲解继承的概念通过程序举例演示,讲解如何产生一个派生类,以及三种继承方式下的访问控制的理解教学学时2学时教学过程一继承概述:1什么叫继承?没有继承的话,类就只是带有相关行为的数据结构,不过继承还为编程语言增加了全新的元素。通过

2、继承,可以在现有类的基础上构件新类,这样,类就变成了可重用,可扩展的组件了。现实世界中的对象一般都呈层次体系存在,也就是一种“isa”的关系。在程序设计中,如果要在一个类之上构件另一个类,或者只是对一个了类做简单的修改来构件另一个类,就与这种关系有关。要实现这个目的,一种途径积聚市把这个类的代码复制粘贴到另一个类,通过修改相关部分或者添加代码,就可以达到目的,创建一个与原来的类稍有不同的类。但这种方法的缺点主要是:1)这种方法并没有建立真正的”isa”关系。新类与原来的类相似,这只是新类共享了原来的代码,并不是因为新类与

3、原类确实是同一个对象类型。2)编译器并不知道两个类之间的关系,所以这两个类不是多态的----它们并非同一个事物的不同变种3)有时候并不能得到原始代码,原始代码或许只是以预编译的二进制格式存在,所以复制粘贴代码不太现实。4)可以看到,这种复制加粘贴的方法经常容易出错误而且浪费时间,也会导致许多代码的物理拷贝残留在整个系统中,使代码维护工作困难重重。那么,有没有一种方法,不需要复制代码,就可以“吸收”一个类的属性和行为,使其作为另外一个类的一部分?毫无疑问,C++对定义的真正的isa关系提供了内置支持。继承关系构成了一种树状

4、层次结构,基类和派生类之间存在着层次关系•类的继承是新的类从已有的类那里得到属性和行为,同时也可以加入新的特性。•已存在的类叫基类(父类),产生的新类叫派生类(子类),派生类同样可以作为基类派生新的类,这样就形成了类的层次结构•单继承:派生类只从一个基类派生。•多继承:派生类从多个基类派生•继承的目的:实现代码重用2继承与派生的作用:对类中共有的函数和数据单独设计为一个类,再写一个类时,这些共有的函数和数据就不用在每个类中重复写了,只需要采用继承方式就可以吸收这些共有的函数和数据,只需要写上自己特有的不同的函数和数据这样

5、就可以实现代码的重用3派生类的声明方式:用class派生类名:继承方式基类名{成员声明;}4多重继承的派生类的声明:class派生类名:继承方式1基类名1,继承方式2基类名2,...{成员声明;}注意:每一个“继承方式”,只用于限制对紧随其后之基类的继承。5三种继承方式:1)三种继承方式:–公有继承–私有继承–保护继承2)不同继承方式的影响主要体现在:(课后习题7-1)派生类成员对基类成员的访问权限,通过派生类对象对基类成员的访问权•不同的继承方式,使基类成员在派生类中的访问属性不同(课后习题7-1)a)公有继承:基类成

6、员的访问属性在派生类中不变b)保护继承:基类中的public和protected成员在派生类中访问权限变为protected,基类中的private成员不变c)私有继承:基类中的成员在派生类中都为私有属性d)不管是什么继承方式,派生类的成员和派生类的对象都无法访问从基类继承的私有成员。说明:private继承并不意味着isa关系,private继承意味着implementedintermsof(根据某物实现出),如果让类D以private形式继承自类B,用意是为了采用类B内已经备妥的某些特性,不是因为B对象和D对象存在任

7、何观念上的关系。Private继承纯粹只是一种实现技术,意味只有实现部分被继承,接口部分应该略去。如果D以private形式继承B,意思是D对象根据B对象实现而得,再没有其他含义。这跟复合的含义是一样的,原则:尽可能的使用复合。当面对并不存在isa关系的两个class,其中一个需要访问另一个的protected成员,或需要重新定义其中一个或者多个virtual函数,才需要private继承。非public继承很少见,建议后慎重使用,即便没有其他原因,只是因为大部分程序员都不熟悉它,也应该如此。程序举例:#include<

8、iostream.h>#includeclassPeople{private:charm_name[18];protected:charm_address[30];public:voidSetPeopleData(charname[20],charaddress[30]);char*GetName

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

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

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