- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c第11章继承
* y( ):x( ),x1( ),x2( ) 例[11.6]中,虽然x1和x2是由共同的基类x派生而来,但它们所对应的基类的不同副本,其类层次如图11.3(a)所示。而本例程序引入了虚基类,其类层次如图11.3(b)所示,从执行结果看到,这时的数据成员a只存在一份拷贝,不论是在类x1中修改还是在夹x2中修改,都是直接对这惟一拷贝进行操作。本例程序执行y obj;语句时,先执行虚基类x的构造函数,a=10,然后执行类 x1的构造函数,使a=20,再执行类x2的构造函数,使a=40。 引进虚基类后,派生类(即子类)的对象中只存在一个虚基类的子对象。当一个类有虚基类时,编译系统将为该类的对象 定义一个指针成员,让它指向虚基类的子对象。该指针被称为虚基类指针。 * * * * 上述程序中的执行过程如下: (1)当在main()中定义toplevel类对象obj时,就要执行构造函数。因此toplevel类是由level1类和level2类派生而来,因此应先执行基类的构造函数,toplevel类的最后执行。在其基类中,level2类为虚基类,因此,尽管level1在level2之前说明,但还是level2的执行在先。在这个层次上构造函数的调用可按顺序分为三大段,即level2、level1、toplevel。对于level2和level1来说,其内部构造函数如何执行,还需在分析它们的基类之后决定。 (2)下面来分析第一段level2。level2类是由base1类和base2类派生出来的,base1类为虚基类,所以先base1,再base2,后level2。又由于base1、base2均不再是派生类,则不用再往下分析,第一段构造函数的执行顺序是base1()、base2()、level2()。 (3)再分析第二段level1。level1类是由base1类和base2类派生而来,base1类为虚基类,并且base1类和base2类再没有基类,因此第二段的构造函数的执行顺序为base1()、base2()、level1()。 由于basel类为level1和level2的虚基类,level1和level2共用base1的一个实例,而这个实例在level2中已初始化,在这里base1()就不需要再执行,因此第二段的构造函数的调用次序为base2()、level1()。 * 设计一个person类,它包括编号和姓名的输入输出,从它派生一个teacher类,用于满足教师数据的操作。再从它派生一个student类,增加性别和班号的输入输出,然后从student类派生出大学生类unistudent和中学生类midstudent,分别实现大中学生数据的操作。 * * * * * * * * * * * C++语言中,可以在从一个类派生出另一 个类。派生出其他的类称为基类,被派生的类称为派生类.一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承为多继承 。 * * * 吸收基类成员 将基类的成员全盘接收,派生类实际上就包含了它的所有基类的除构造函数和析构函数之外的所有成员。 2.改造基类成员 对基类成员的改造包括两个方面: 一是基类成员的访问控制问题,主要依靠派生类定义时的继承方式来控制; 二是对基类数据或函数成员的覆盖,就是在派生类中定义一个和基类数据或函数同名的成员,由于作用域不同,于是发生同名覆盖,基类中的成员就被替换成派生类中的同名成员。 3.添加新的成员 派生类新成员的加入是继承与派生机制的核心,是保证派生类在功能上有所发展的关键。 根据实际需要,给派生类添加适当的数据和函数成员,来实现必要的新增功能。 同时,在派生过程中,基类的构造函数和析构函数是不能被继承下来的。在派生类中,一些特别的初始化和扫尾清理工作,也需要我们重新加入新的构造函数和析构函数。 * 继承方式控制基类中具有不同访问属性的成员在派生类中的访问属性,即不同的继承方式(public,private,public)会导致原来具有不同访问属性的基类成员在派生类中的访问属性也有所不同。这里说的访问主要来自两个方面: 一是派生类中的新增成员对从基类继承来的成员的访问。 二是在派生类外部通过派生类的对象对从基类继承来的成员的访问。 * * class A { public: void f(); private: int val; } void A::f() { val++;} class B:public A { public: void func(); private: int i; } void B::func() { val++; //错! i++; } B没有成员
您可能关注的文档
最近下载
- 臀位剖宫产护理查房.pptx VIP
- 北京市通州区2024-2025学年高三上学期期中质量检测数学试卷2.docx
- 美食推荐微信小程序的设计与实现.docx VIP
- 冬季预防训练伤部队ppt.pptx VIP
- 提高患者腕带佩戴依从性PDCA.docx VIP
- 《工程勘察设计收费标准》2002年修订本完整.pdf VIP
- TZS 0680—2025《医疗机构实验室生物安全管理组织架构规范》(水印版).pdf VIP
- SANKEN三肯变频器samco-ns TEXC-NS-002(小容量)使用手册调试说明书.pdf
- 标准图集-05R502-燃气工程设计施工.pdf VIP
- 不靠谱梦想该劝阻吗辩论赛 正方辩词一辩、二辩、三辩、四辩发言稿.docx VIP
原创力文档


文档评论(0)