- 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++_CHAP9(继承和派生 )2.ppt
【学习目标】 掌握派生和继承的相关概念和使用方法 掌握在继承中构造函数的设计方法和调用顺序 掌握在继承中析构函数的设计方法和调用顺序 掌握虚基类的相关概念和使用方法掌握 运用类的继承和派生的相关知识进行综合程序设计 【本章内容】 7.1 基类与派生类 C++的继承关系的特点: 7.1.1 派生类的定义格式 7.1.1 派生类的定义格式(续) 7.1.2 派生类的继承方式 表7-1 不同继承方式的基类和派生类特性 公有继承(public) 基类的public和protected成员的访问属性在派生类中保持不变,但基类的private成员不可直接访问。 派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。 通过派生类的对象只能访问基类的public成员。 分析例7-1 例7.1:分析下列程序中的访问权限,并回答问题。 回答下列问题,并说明原因。 1、派生类B中成员函数f2()能否访问基类A中的成员: f1()、j1和i1? 例7.2:分析下列程序,并回答问题。 回答下列问题,并说明原因。 私有继承(private) 基类的public和protected成员都以private身份出现在派生类中,但基类的private成员不可直接访问。 派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。 通过派生类的对象不能直接访问基类中的任何成员 分析例7-2 保护继承(protected) 基类的public和protected成员都以protected身份出现在派生类中,但基类的private成员不可直接访问。 派生类中的成员函数可以直接访问基类中的public和protected成员,但不能直接访问基类的private成员。 通过派生类的对象不能直接访问基类中的任何成员 分析继承方式.cpp 基类与派生类的关系 表9-1 不同继承方式的基类和派生类特性 9.2.1 基类成员的访问权限 单继承主要分为3种方式: 公有基类、私有基类和保护基类。 私有基类: 9.2.2 构造函数和析构函数 派生类构造函数的一般格式: 基类的构造函数 子对象类的构造函数(如果有的话) 派生类构造函数 分析例5-3,例5-4(单继承及构造函数) 析构函数 当对象被删除时,派生类的析构函数被执行。由于析构函数也不能被继承,因此在执行派生类的析构函数时,基类的析构函数也将被调用。 执行顺序是先执行派生类的析构函数,再执行基类的析构函数,其顺序与执行构造函数时的顺序正好相反。析构函数首先为派生类调用,然后为子对象类的析构函数调用,最后调用基类的析构函数。 派生类构造函数使用中应注意的问题 9.2.3 子类型和类型适应(了解) 1. 子类型 有一种类型A,它至少包含有另一种类B的所有行为,则 称类型A是类型B的子类型。类型A适应于类型B。子类型和 类型适应是不可逆的。 例如,在公有继承方式下,派生类是基类的子类型,派 生类适应于基类。派生类的对象是基类的对象。 2. 赋值兼容规则 在公有继承方式下,派生类是基类的子类型。此时满足 下述赋值兼容规则。 ① 派生类的对象可给基类对象赋值 ② 派生类的对象可用来对基类对象的引用进行初始化 ③ 派生类的对象地址值可用来给基类的指针赋值 参见[例7.4]。 9.3 多继承 9.3.2 多继承的构造函数 9.3.3 二义性问题 多继承中派生类对基类成员访问在下列两种情况下可能出现二义性。 (1) 访问不同基类的相同成员时可能出现二义性 例如,C类有两个直接基类A类和B类,其中,A类和B类中都 有一个公有成员函数f( ),并且C类公有继承A和B,这时当C类 的对象c1,访问基类成员f( )时,c1.f( )则会出现二义性。 为了避免出现二义性,则要用成员限定方法指出f( )是属于 哪个类的。 即c1.A∷f( )或者c1.B∷f( )例5-6,5-7中 (2) 访问共同基类中成员时 可能出现二义性。例如, class A { public: int a; }; class B1:public A { public: int b1; }; class B2:public A { public: int b2; }; class C:public B1,public B2 { public: int f( ); private: int c; }
文档评论(0)