单继承与多态.pptVIP

  1. 1、本文档共57页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
单继承与多态.ppt

* * 7.1.6 保护继承 三种继承方式下,基类成员在派生类中的访问控制属性总结如图: 基类属性 继承方式 public protected private public public protected 不可访问 protected protected protected 不可访问 private private private 不可访问 7.1.7 派生类的构造与析构 当使用派生类建立一个派生类对象时,将首先产生一个基类对象,依附于派生类对象中。 如果派生类新增成员中还包括内嵌的其它类对象,派生类的数据成员中实际上还间接包括了这些对象的数据成员,因此,构造派生类对象时,就要对基类数据成员,新增数据成员和成员对象的数据成员进行初始化。 在派生类对象的成员中,从基类继承来的成员被封装为基类子对象,他们的初始化由派生类构造函数隐含调用基类构造函数进行初始化;内嵌成员对象则隐含调用成员类的构造函数予以初始化;派生类新增的数据成员由派生类在自己定义的构造函数中进行初始化; 7.1.7 派生类的构造与析构 1.派生类构造函数的定义 派生类名(参数总表): 基类名1(参数表1),...,基类名m (参数表m), 成员对象名1(成员对象参数表1),...,成员对象名n(成员对象参数表n) { 派生类新增成员的初始化; } 基类名1(参数表1),...,基类名m (参数表m)称为基类成员的初始化表。 成员对象名1(成员对象参数表1),...,成员对象名n(成员对象参数表n) 为成员对象 的初始化表。 基类成员的初始化表与成员对象的初始化表构成派生类构造函数的初始化表。 在派生类构造函数的参数总表中,需要给出基类数据成员的初值、成员对象数 据成员的初值、新增一般数据成员的初值。 在参数总表之后,列出需要使用参数进行初始化的基类名、成员对象名及各自 的参数表,各项之间使用逗号分隔。 基类名、对象名之间的次序无关紧要,它们各自出现的顺序可以是任意的。在 生成派生类对象时,程序首先会使用这里列出的参数,调用基类和成员对象的 构造函数。。 7.1.7 派生类的构造与析构 什么时候需要定义派生类的构造函数? 如果基类定义了带有形参表的构造函数时,派生类就应当定义构造函数,提供一个将参数传递给基类构造函数的途径,保证在基类进行初始化时能够获得必要的数据。 ① 调用基类构造函数; ② 调用内嵌成员对象的构造函数,调用顺序按照它们在类中定义的顺序 。 ③ 派生类自己的构造函数。 如果基类没有定义构造函数,派生类也可以不定义构造函数,全部采用默认的构造函数,这时新增成员的初始化工作可以用其他公有成员函数来完成。 2 单继承的构造与析构 单继承时,派生类构造函数调用的一般次序如下: ④ 当派生类对象析构时,各析构函数的调用顺序正好相反。首先调用派生类析构 函数(清理派生类新增成员);然后调用派生类成员对象析构函数(清理派生类新 增的成员对象);最后调用基类析构函数(清理从基类继承来的基类子对象)。 例p352 例ch16-1 p350 class student { …… private: char name[10]; float average; }; class GraduateStudent:public student { …… private: int qualifierGrade; }; 在构造一个子类时,完成其基类部分的构造由基类构造函数去做。 从Student 继承部分 (14字节) GraduateStudent 特有部分 (2字节) this GraduateStudent 对象(共16字节) §7-1 继承 派生类的构造顺序 class GraduateStudent:public Student { public: GraduateStudent(char *pName,Advisor adv) : Student(pName), advisor(adv) { qualiferGrade=0; } protected: Advisor advisor; int qualiferGrade; }; void fn(Advisor advisor) { GraduateStudent gs(“Yen Kay Doodle”,advisor); } void main() { Advisor da; fn(da); } 共构造了两个Advisor对象,一个Student对象, 一个Gradu

文档评论(0)

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

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

1亿VIP精品文档

相关文档