第5讲继承以及派生.pptVIP

  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文档。上传文档
查看更多
如果不由最后的派生类直接对虚基类初始化,而由虚基类的直接派生类对虚基类初始化,就有可能由于在类B和类C的构造函数中对虚基类给出不同的初始化参数而产生矛盾。 所以规定:在最后的派生类中不仅要负责对其直接基类初始化,还要负责对虚基类初始化。 2. 虚基类的初始化 例5.9 在例5.8的基础上,在Teacher类和Student类之上增加一个共同的基类Person,作为人员的一些基本数据都放在Person中,在Teacher类和Student类中再增加一些必要的数据。C5-9.cpp 不提倡在程序中使用多重继承,只有在比较简单和不易出现二义性的情况或实在必要时才使用多重继承。 能用单继承解决的问题就不用多重继承。 3. 虚基类的简单应用 不同类型数据之间的自动转换和赋值,称为赋值兼容。 基类与派生类对象之间有赋值兼容的关系,可以将派生类的值赋给基类对象,在用到基类对象时可用其子类对象代替。具体表现为: 5.7 基类与派生类的转换 派生类对象可以向基类对象赋值 class B: public A A a1; B b1; a1 = b1; 赋值后不能通过对象a1访问派生类对象b1的成员。 5.7 基类与派生类的转换 5.5 派生类的构造函数和析构函数 5.5.1 简单的派生类的构造函数 5.5.2 有子对象的派生类的构造函数 5.5.3 多层派生时的构造函数 5.5.4 派生类构造函数的特殊形式 5.5.5 派生类的析构函数 基类的构造函数不能被继承,派生类中需要声明自己的构造函数。 派生类声明构造函数时,只需要对本类中新增成员进行初始化,调用基类构造函数对继承来的基类成员初始化。 例5.5 简单派生类的构造函数 C5-5.cpp 5.5.1 简单的派生类的构造函数 一般形式为: 派生类构造函数名(总参数表列):基类构造函数名(参数表列) {派生类中新增数据成员初始化语句} 在建立一个对象时,执行构造函数的顺序是:1.派生类构造函数先调用基类构造函数;2.再执行派生类构造函数。 5.5.1 简单的派生类的构造函数 5.5.2 有子对象的派生类的构造函数 类的数据成员还可以包含类对象,如在声明一个类时包含这样的数据成员: Student s1; s1就是类对象中的内嵌对象,称为子对象,即对象中的对象。 在例5.5的派生类Student1中,还可以增加班长一项,而班长也属于Student类型,有学号和姓名等基本数据,班长项就是派生类Student1中的子对象。 怎样对子对象初始化?由于类是一种抽象类型,不能带具体的值,所以不能在声明派生类时对子对象初始化。例5.6C5-6.cpp 子对象的初始化是在建立派生类对象时通过调用派生类构造函数来实现的。 派生类构造函数的任务包括: 对基类数据成员初始化 对子对象的数据成员初始化 对派生类的数据成员初始化 5.5.2 有子对象的派生类的构造函数 派生类构造函数的一般形式 派生类构造函数名(总参数表): 基类构造函数名(参数表), 子对象名(参数表) {派生类中新增数据成员初始化语句} 执行派生类构造函数的顺序 调用基类构造函数,初始化基类数据成员 调用子对象构造函数,初始化子对象数据成员 执行派生类构造函数,初始化派生类数据成员 5.5.2 有子对象的派生类的构造函数 5.5.3 多层派生时的构造函数 一个类不仅可以派生出一个派生类,派生类还可以继续派生,形成派生的层次结构。 多层派生时怎样写派生类的构造函数? 例5.7 多级派生情况下派生类的构造函数 C5-7.cpp 不需要列出每一层派生类的构造函数,只须写出其上一层派生类(即它的直接基类)的构造函数即可。 5.5.3 多层派生时的构造函数 5.5.4 派生类构造函数的特殊形式 当不需要对派生类新增的成员进行任何初始化时,派生类构造函数的函数体可以为空。如例5.6中派生类Student1构造函数改写成: Student1(int n,string nam,int n1, string nam1) : Student(n,nam),monitor(n1,nam1) { } 如果在基类中没有定义构造函数,或定义了没有参数的构造函数,在定义派生类构造函数时可以不写基类构造函数。在调用派生类构造函数时,系统自动首先调用基类的默认构造函数。 如果在基类和子对象的类中都没有定义带参数的构造函数,也不需要对派生类自己的数据成员进行初始化,可以不定义派生类构造函数。 5.5.4 派生类构造函数的特殊形式 如果在基类或子对象的类声明里定义了带参数的构造函数,就必须定义派生类构造函数,并在派生类构造函数中写出基类或子对象类的构造函数

文档评论(0)

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

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

1亿VIP精品文档

相关文档