第8章-继承与派生-(精选·公开·课件).pptVIP

第8章-继承与派生-(精选·公开·课件).ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 继承与派生 8.1 继承与派生概念 8.2 派生类的继承方式和定义 8.3 派生类的构造和析构函数 派生类构造函数定义 派生类名::派生类名(参数表):基类构造函数1(参数表1),…,子对象名(参数表) { 派生类中新数据成员初始化 } 派生类构造函数的参数列表包括参数的类型和名称。 基类构造函数的参数列表只包括参数的名称。 Student1::Student1(int num,char n[20],char s, int a,char ad[20]):Student(num,n,s) { age=a; strcpy(addr,ad); } Student(num, n, s) Student(int num, char n[],char s) 派生构造函数调用原则 【① 先调用基类的构造函数来初始化从基类中继承的数据成员】 【③ 最后调用派生类自身的构造函数来初始化新定义的数据成员】 【② 若含子对象,调用子对象类的构造函数】 (2) 若基类的构造函数使用了参数,则派生类必须定义构造函数,为基类构造函数提供参数。 注意 (1)若基类中未定义构造函数,则派生类构造函数的定义中可以省略对基类构造函数的调用。 派生类构造函数可以重载,以调用基类的不同的构造函数. 析构函数调用原则 【① 先调用派生类的析构函数释放对象】 【③ 最后调用基类中的析构函数释放对象】 【② 若含子对象,调用子对象类的析构函数】 In Constructor of class A In Constructor of class B x=5 y=6 x+y=11 In Destructor of class B In Destructor of class A 继承性是客观世界中一种常见的现象。所表达的是一种类与类之间的关系,这种关系允许在既有类的基础上创建新类。 例如:路上跑的各种各样的汽车都归结为一个汽车类,在诸多汽车中可以派生出卡车类,公共汽车类,消防车类,轿车类等。其中,轿车类具有汽车类的特征,但同时还有自己的特点,如座位少,用于载人等。 (1)A是B1,B2的基类 B1是A的派生类,又是C1,C2,C3的基类 (2)B2是A的派生类(单继承),又是C3的基类 (3)C3是 B1,B2的派生类(多继承) 派生类的定义形式与普通类的定义基本相同,不同的是必须在类定义的头部指明它的基类。 单继承:派生类只有一个基类的情况。 多继承:派生类同时有多个基类的情况。 继承方式:访问控制的方式(public,protected,private),缺省情况下,认为是private继承。 派生类成员指除了从基类继承来的所有成员外,新增加的成员。 派生类成员指除了从基类继承来的所有成员外,新增加的成员。 保护成员:对于派生类来说,基类的保护成员象公有成员一样可以被直接访问;但在类的外部,类的保护成员象私有成员一样不能被访问。 引入保护成员的意义: 类中的保护成员在该类及它的派生类中是可见的。而私有成员只能被类自身的成员函数访问,其他任何地方都不可见 私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。 由于派生类中包含从基类继承来的和派生类中新声明的数据成员,而构造函数不能够被继承的,因此对继承来的基类成员的初始化的工作也要由派生类的构造函数完成。 在定义派生类的构造函数时除了对自己的数据成员初始化外,还必须负责调用基类构造函数,使基类的数据成员得以初始化,若派生类中还有基类子对象,则还应该包含对子对象的初始化。 首先调用其基类的构造函数来初始化从基类中继承的数据成员 然后调用派生类自身的构造函数,初始化在派生类中新声明的数据成员. 注意: 1、若基类中未定义构造函数,则派生类构造函数的定义中可以省略对基类构造函数的调用。 2、若基类的构造函数使用了参数,则派生类必须定义构造函数,为基类构造函数提供参数。 问题: //(1)派生类B的成员函数f2()是否能访问基类A中的成员? //(2)派生类B的对象b是否能访问基类A中的成员? //(3)派生类C的成员函数f3()是否能访问基类B中的成员?否能间接访问基类A中的成员? //(4)派生类C的对象c是否能访问基类B中的成员?否能间接访问基类A中的成员? //(5)对公有继承有什么结论? 公有继承时,派生类的成员函数可访问基类中的公有成员和保护成员,派生类的对象仅可访问基类中的公有成员。 思考: //(1)执行该程序时,哪个语句会出现编译错?为什么? d1.g()语句出错,私有继承,B类的对象不能访问A类的成员函数 //(2)去掉出错语句后,运行结果是多少? 6 h //(3)继承方式默认是什么

文档评论(0)

夏天 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档