继承与派生课件.ppt

上传人:石*** 文档编号:87163939 上传时间:2023-04-16 格式:PPT 页数:24 大小:860KB
返回 下载 相关 举报
继承与派生课件.ppt_第1页
第1页 / 共24页
继承与派生课件.ppt_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《继承与派生课件.ppt》由会员分享,可在线阅读,更多相关《继承与派生课件.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、继承与派生第1页,此课件共24页哦基本概念派生与继承派生与继承直接基类与间接基类直接基类与间接基类单继承与多继承单继承与多继承派生类成员派生类成员派生派生类对类对基基类类的的继继承方式承方式 第2页,此课件共24页哦派生与继承派生与继承在原有类的基础上创建新类的过程称为原有类派生出新类原有类派生出新类,简称派生派生;新类的特征(数据成员)和功能(成员函数)中保留原有类的一些特征和功能的性质称为新类对原有类的继承,新类对原有类的继承,简称继承继承。原有类称为基类或父类,新类称为派生类,导出类或子类。子类能够继承父类的全部特征,包括所有的数据成员和成员函数,并且子类还能够定义父类所没有的、属于自己

2、的特征,即自己的数据成员和成员函数。通过类的继承关系,使得基类的代码可以为新定义的派生类所重用,避免了代码的重新书写和凋试。第3页,此课件共24页哦直接基类与间接基类派生出来的新类同样可以作为基类继续派生出来的新类同样可以作为基类继续派生出新的类。派生出新的类。直接派生出新类的基类称为直接基类直接派生出新类的基类称为直接基类新类的基类的基类或更上层的基类称为新类的基类的基类或更上层的基类称为新类的间接基类。新类的间接基类。第4页,此课件共24页哦单继承与多继承单继承与多继承一个派生类只有一个直接基类,这种继承称为单继承单继承;一个派生类有多个直接基类,这种继承称为多继承多继承。一个基类也可以有

3、多个派生类。一个父类的特征,可以同时被多个子类继承。这样,就形成了一个相互关联的继承和派生的类的家族,有时也称作类族类族。第5页,此课件共24页哦派生类成员派生类成员派生类继承了基类的全部数据成员和除了构派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部函数成员造、析构函数之外的全部函数成员 。派生类中的所有继承基类的数据成员和成员函数称为派生类继承成员派生类继承成员;派生类中除继承基类的数据成员和成员函数外,所有的新增加数据成员和成员函数称为派生类新增成员派生类新增成员。派生类的继承成员和派生类新增成员统称派派生类成员生类成员。第6页,此课件共24页哦派生类对基类的继承方式 派生类

4、对基类的继承方式(继承权限指明符继承权限指明符)有public(公有继承)、protected(保护继承)和private(私有继承)三种 派生类继承继承成员的访问属性在派生的过程中是可以调整的,派生类对基类的继承方式控制了基类中具有不同访问属性的成员在派生类中的访问属性。这里说的访问主要指:派生类新增成员对从基类继承来的成员的访问派生类新增成员对从基类继承来的成员的访问在派生类外部在派生类外部(非类族内的成员非类族内的成员),通过派生类的对,通过派生类的对象对从基类继承来的成员的访问。象对从基类继承来的成员的访问。类外的函数(包括类外的函数(包括mainmain函数和其它类的函数)对从基函数

5、和其它类的函数)对从基类继承来的成员的访问。类继承来的成员的访问。第7页,此课件共24页哦派生类的定义与继承方式派生类的定义格式派生类的定义格式公有继承公有继承public 私有继承私有继承private保护继承保护继承protected小结:小结:第8页,此课件共24页哦派生类的定义格式class class 派派生生类类名名:继继承承方方式式 基基类类1 1,继继承承方方式式 基基类类2 2,继承方式继承方式 基类基类n n 派生类成员定义;派生类成员定义;注意:每一种继承方式只限定紧跟其后的基类的访问性质。继承方式的缺省方式是私有继承(private)。继承方式的不同决定了对基类成员的访

6、问性质。第9页,此课件共24页哦公有继承public 派生类中的公有成员包括基类部分的公有成员和新定义的公有成员,保护成员包括基类部分的保护成员和新定义的保护成员,私私有有成成员员仅仅为为新新定定义义部部分分的的私私有有成成员员。派派生生类类成成员员可可以以直直接接访问他们访问他们(公有,保护,私有私有成员);在派生类外部,派派生生类类对对象象,外部函数(普通和类外函数)可以直接访问派派生生类类的的公公有有成成员员(包包括括继继承承过过来来的的基类的公有成员);不不能能通通过过基基类类对对象象和和派派生生类类对对象象访访问问继继承承过过来来的的基基类类保保护护成成员员(不能通过类对象访问类的(

7、不能通过类对象访问类的保护,私有私有成员););派生类新增成员函数和外部函数(普通和类外函数)不能直直接接访问继继承承过过来来的的基类私有成员;但可以通过继继承承过过来来的的基类的公有成员函数或保护成员函数进行访问。例见备注页 第10页,此课件共24页哦私有继承私有继承private派生类中的公有成员仅为新定义部分的公有成员,保护成派生类中的公有成员仅为新定义部分的公有成员,保护成员也仅为新定义部分的保护成员,私有成员包括基类部分员也仅为新定义部分的保护成员,私有成员包括基类部分的公用成员和保护成员以及新定义部分的私有成员。的公用成员和保护成员以及新定义部分的私有成员。派派生生类类成成员员可以

8、直接可以直接访问访问;在派生在派生类类外部外部,派生类对象,派生类对象,外部函数(普通和类外函数)不不能直接能直接访问访问私有私有继继承承过过来的基来的基类类的公有成的公有成员员和保和保护护成成员员;但可以通但可以通过过派生派生类类的公有的公有成成员员函数函数进行进行访问访问。派生派生类类新增新增成成员员和和对对象象,外部函数(普通和类外函数),外部函数(普通和类外函数)不能直不能直接接访问继访问继承承过过来的基来的基类类私有成私有成员员;但可以通;但可以通过过私有私有继继承承过过来来的基的基类类的公有成的公有成员员函数和保函数和保护护成成员员函数函数间接间接访问继访问继承承过过来的来的基基类

9、类的私有成的私有成员员。例见备注页例见备注页第11页,此课件共24页哦保护继承protected 派派生生类类中中的的公公用用成成员员仅仅为为新新定定义义部部分分的的公公用用成成员员,保保护护成成员员包包括括基基类类部部分分的的公公用用成成员员和和保保护护成成员员以以及及新新定定义义部部分分的的保保护护成成员员,私私有有成成员员仅仅为为新新定定义义部部分分的私有成员。派生类成员可以直接访问;的私有成员。派生类成员可以直接访问;在派生在派生类类外部外部,派生类对象,派生类对象,外部函数(普通和类外外部函数(普通和类外函数)函数)不能直接不能直接访问访问保护保护继继承承过过来的基来的基类类的公有成

10、的公有成员员和保和保护护成成员员;但可以通;但可以通过过派生派生类类的公有的公有成成员员函数函数进行进行访问访问。派生派生类类新增新增成成员员和和对对象象,外部函数(普通和类外函数),外部函数(普通和类外函数)不能直接不能直接访问访问保护保护继继承承过过来的基来的基类类私有成私有成员员;但可;但可以通以通过过保护继继承承过过来的基来的基类类的公有成的公有成员员函数和保函数和保护护成成员员函数函数间接间接访问继访问继承承过过来的基来的基类类的私有成的私有成员员。例见备注页例见备注页第12页,此课件共24页哦小结直直接接派派生生类类的的成成员员函函数数(无无论论是是继继承承还还是是新新增增的的)能

11、能够够访访问问该该类类中中具具有有任任何何访访问问权权限限的的成成员员,同同时时也也能能够够访访问问其其他他类类中中具具有有公公用用访访问问权权限限的的成成员员和和类类外外的的对对象象与与函函数数,但但不不能能访访问问其其他他类类中中的的保保护成员和私有成员,即使其他类是自己继承的类,或自己成员所属的类。护成员和私有成员,即使其他类是自己继承的类,或自己成员所属的类。派生类作为新的基类,继续派生时,应注意:派生类作为新的基类,继续派生时,应注意:假假设设B B类类以以私私有有方方式式继继承承了了A A类类后后,B B类类又又派派生生出出C C类类,那那么么C C类类的的成成员员和和对对象象都都

12、不不能能直直接接访访问问从从A A类中间接继承来的任何成员。类中间接继承来的任何成员。如如果果B B类类是是以以保保护护方方式式继继承承了了A A类类,那那么么A A类类中中的的公公有有和和保保护护成成员员在在B B类类中中都都是是保保护护成成员员。B B类类再再派派生生出出C C类类后后,A A类类中中的的公公有有和和保保护护成成员员被被C C类类间间接接继继承承后后,有有可可能能是是保保护护的的或或者者是是私私有的。因而,有的。因而,C C类的成员可以访问间接从类的成员可以访问间接从A A类中类中保护方式保护方式继承来的成员。继承来的成员。每每个个派派生生类类对对象象所所占占有有的的存存储

13、储空空间间的的大大小小等等于于其其基基类类部部分分的的所所有有数数据据成成员员占占有有的的存存储储空空间间的的大大小小与与新新定定义义部部分分的的所所有有数数据据成成员员占占有有的的存存储储空空间间大大小小的的总总和和,并并且且前前面面的的存存储储空空间间分分配给基类部分的数据成员使用,后面的存储空间分配给新定义部分的数据成员使用。配给基类部分的数据成员使用,后面的存储空间分配给新定义部分的数据成员使用。第13页,此课件共24页哦派生类的构造函数派生类的构造函数作用派生类构造函数的格式派生类构造函数执行次序注意问题:单继承举例多继承举例第14页,此课件共24页哦派生类的构造函数作用类的派生过程

14、中,基类的构造函数并没有继承下来,要完成派生类对象的数据成员的初始化工作,就必须给派生类添加新的构造函数。派生类的数据成员组成:派生派生类类继承的继承的所有基所有基类类的数据成的数据成员员;派生派生类类新增的数据成新增的数据成员员;派生派生类类新增成新增成员员中内嵌的其他中内嵌的其他类类的的对对象象,派生派生类类的的数据成数据成员员中中实际实际上上还间还间接包括了接包括了这这些些对对象的数据成象的数据成员员。构造派生类的对象时,就要对派生类继承的所有基类数据成员、新增数据成员和成员对象的数据成员进行初始化。第15页,此课件共24页哦派生类构造函数的格式 派生构类造函数名(参数表):派生构类造函

15、数名(参数表):基基类类构构造造函函数数名名1(1(参参数数表表1)1),,基基类类构构造造函函数数名名n n(参参数数表表n n),对对象象成员名成员名1 1(参数表(参数表1 1),),对象成员名对象成员名n(n(参数表参数表n)n)(派生类新增成员初始化)(派生类新增成员初始化)*构造函数与所属类同名构造函数与所属类同名第16页,此课件共24页哦派生类构造函数执行次序派生类构造函数执行的一般次序如下派生类构造函数执行的一般次序如下:调调用用基基类类构构造造函函数数,调调用用顺顺序序按按照照定定义义派派生生类类时时,基类被继承时声明的顺序基类被继承时声明的顺序(从左向右从左向右)。调调用用

16、成成员员对对象象的的构构造造函函数数,调调用用顺顺序序按按照照它它们们在在派生类中声明的顺序。派生类中声明的顺序。派生类的构造函数体中的内容。派生类的构造函数体中的内容。第17页,此课件共24页哦注意问题派派生生类类的的构构造造函函数数名名与与派派生生类类名名相相同同。在在派派生生类类构构造造函函数数的的参参数数表表中中,给给出出了了初初始始化化基基类类的数据成员、新增对象的数据及新增数据成员所需要的参数。的数据成员、新增对象的数据及新增数据成员所需要的参数。在在派派生生类类参参数数表表之之后后,列列出出需需要要使使用用参参数数进进行行初初始始化化的的基基类类名名和和成成员员对对象象名名及及各

17、各自自的的参参数数表表,各各项之间使用逗号分隔。项之间使用逗号分隔。这这里里基基类类名名,对对象象名名之之间间的的顺顺序序可可以以是是任任意意的的。在在生生成成派派生生类类对对象象时时,系系统统会会首首先先使使用用这这里里列列出出的的参参数数,按按基基类类,内内嵌嵌对对象象,派派生生类类的的顺顺序序,调调用用相相应应的的构构造造函函数。数。当当一一个个类类同同时时有有多多个个基基类类时时,对对于于所所有有需需要要给给予予参参数数进进行行初初始始化化的的基基类类,都都要要显显式式给给出出基基类类名名和和参数表;参数表;若派生类的基类也是派生类时,每个派生类只需负责直接基类的构造函数若派生类的基类

18、也是派生类时,每个派生类只需负责直接基类的构造函数对对于于使使用用缺缺省省构构造造函函数数的的基基类类,可可以以不不给给出出类类名名和和参参数数表表。同同样样,对对于于对对象象成成员员,如果是使用缺省构造函数,也不需要写出对象名和参数表。如果是使用缺省构造函数,也不需要写出对象名和参数表。如如果果基基类类定定义义了了带带有有形形参参表表的的构构造造函函数数时时,派派生生类类必必须须定定义义构构造造函函数数,提提供供一一个个将将参参数传递给基类构造函数的途径,保证在基类进行初始化时能够获得必要的数据。数传递给基类构造函数的途径,保证在基类进行初始化时能够获得必要的数据。如如果果基基类类没没有有定

19、定义义构构造造函函数数,派派生生类类也也可可以以不不定定义义构构造造函函数数,全全部部采采用用缺缺省省的的构构造函数,这时新增成员的初始化工作可以用其他公有函数来完成。造函数,这时新增成员的初始化工作可以用其他公有函数来完成。第18页,此课件共24页哦单继承举例例1 派生类和基类的构造函数和析构函数的执行顺序 例2 不带对象成员的构造函数和析构函数调用,传递参数给派生类和基类的构造函数。例3 带对象成员的构造函数和析构函数调用第19页,此课件共24页哦多继承举例见备注页第20页,此课件共24页哦派生类的析构函数派生类的析构函数的特点:举例:第21页,此课件共24页哦派生类的析构函数的特点类的派

20、生过程中,基类的析构函数也不能够被派生类继承下来,这就需要程序员在派生类中自行定义。因此,在删除对象时,除调用派生类的析构函数外,还要调用基类的析构函数。派生类的析构函数没有类型,也没有参数析构函数的调用顺序是:首先是执行派生类的构造函数,对派生类新增普通成员进行清理;首先是执行派生类的构造函数,对派生类新增普通成员进行清理;然后是执行对象成员的构造函数,对派生类新增的对象成员进行清然后是执行对象成员的构造函数,对派生类新增的对象成员进行清理;理;最后是执行基类的构造函数,对所有基类进行清理。与构造函数的最后是执行基类的构造函数,对所有基类进行清理。与构造函数的调用顺序正好相反。调用顺序正好相反。第22页,此课件共24页哦举例:例1、派生类析构函数实例(多继承、含有子对象)例2、例3、徐孝凯P267277第23页,此课件共24页哦习题19.1,2,39.215第24页,此课件共24页哦

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁