第4章_继承与派生.ppt

  1. 1、本文档共74页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第4章_继承与派生

* 4.4.2 虚基类带参构造函数的调用 (4)若有多个虚基类,构造函数的调用顺序如何? 仍然遵循先左后右,自上而下的原则,与调用非虚基类的构造函数顺序一样 (5)若虚基类是其他类的派生类,该虚基类构造函数的调用顺序如何? 若虚基类是其他类的派生类,在调用虚基类构造函数时,仍然按照基类与派生类构造函数的调用顺序要求,先调用虚基类的基类的构造函数,再调用该虚基类的构造函数 请结合例4.11具体理解 返回 * 基类的公有派生类继承了基类中除构造函数、析构函数以外的所有成员,并且继承得到的非私有成员在派生类中的访问权限与在基类中完全相同,可以将公有派生类认为是一种“特殊的”基类,或者说是基类的派生类型,具备了基类的所有特性。 凡是基类能解决的问题,公有派生类也能解决。因此,在基类和公有派生类之间存在赋值兼容规则 4.5 赋值兼容规则 * 以下4种情况符合赋值兼容规则: (1)基类对象=公有派生类对象 说明:赋值后的基类对象只能获得基类成员部分,而在派生类中新增加的成员都不能被基类对象访问。不允许反方向的赋值“派生类对象=基类对象” (2)指向基类对象的指针=公有派生类对象地址 说明:利用赋值后的指针可以间接访问基类的成员部分,如果要间接访问派生类新增加的成员时,必须通过指针类型的强制转换,转换为派生类类型的指针再行访问。不允许反方向的赋值“指向派生类对象的指针=指向基类对象的地址” 4.5 赋值兼容规则 * 4.5 赋值兼容规则 以下4种情况符合赋值兼容规则: (3)指向基类对象的指针=指向公有派生类对象的指针 说明:利用赋值后的指针可以间接访问基类的成员部分,如果要间接访问派生类新增加的成员时,必须通过指针类型的强制转换,转换为派生类类型的指针再行访问。不允许反方向的赋值“指向公有派生类对象的指针=指向基类对象的地址” (4)基类的引用=公有派生类对象,即派生类对象可以初始化基类的引用 说明:赋值后的引用只可以访问基类成员部分,不可以访问派生类新增成员,因为此时无法对引用进行强制类型转换。不允许反方向的赋值“派生类的引用=基类对象” * 【例4.12】赋值兼容原则示例 基类Base,其公有派生类Derived 的定义略…… void main( ) { Base b1(11); //定义一个基类对象 coutb1.geta( )=b1.geta( )endl; //访问本类成员 Derived d1(22,33); //定义一个派生类对象 b1=d1; //基类对象=公有派生类对象 coutb1.geta( )=b1.geta( )endl; //访问基类成员部分 //coutb1.getb( )=b1.getb( )endl; //ERROR! b1不能访问派生类中新增的成员 //d1=b1; //ERROR!不允许派生类对象=基类对象 4.5 赋值兼容规则 * Base *pb=d1; //指向基类对象的指针=派生类对象的地址 coutpb-geta( )=pb-geta( )endl; //访问基类成员部分 //coutpb-getb()=pb-getb(); //ERROR! cout((Derived*)pb)- getb( )= ((Derived*)pb)-getb( ); //类型强制转换后可访问派生类新增成员 //Derived *pd=b1; //ERROR! Base rb=d1; //基类的引用=派生类对象 coutrb.geta( )=rb.geta( )endl; //访问基类成员部分 //coutrb.getb( )=rb.getb( )endl; //ERROR! //Derived dr=b1; //ERROR!不允许派生类的引用=基类对象 } 4.5 赋值兼容规则 * 【例2.14】请在VC++6下运行程序,并将原来注释的语句作为源程序中语句重新编译,观察运行结果 4.5 赋值兼容规则 程序的运行结果为: b1.geta( )=11 b1.geta( )=22 pb-geta( )=22 ((Derived*)pb)-getb( )=33 rb.geta( )=22 返回 * 本章介绍了面向对象的第二个重要特性——继承性,继承实现了类间的层次关系,实现了更高层次的代码重用。本章主要有以下内容 (1)继承与派生的基本概念。通过继承与派生机制可

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档