- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 继承与派生 本章内容提要 9.1 类的继承与派生概述 9.2 多重继承 9.3 虚基类 上机实训 9.1 类的继承与派生概述 9.2 多重继承 9.3 虚基类 所谓继承,就是在一个已有类的基础上建立一个新类,已有的类称为“基类”或“父类”,新建立的类称为“派生类”或“子类”。 9.1.1 继承与派生的概念 如果一个派生类只从一个基类派生,称为单继承;如果一个派生类从多个基类派生,称为多重继承。 单继承 多重继承 9.1.2 派生类的声明 class 派生类名 :[继承方式] 基类名 { 派生类新增加的成员声明; }; 例如: class Book //定义基类Book { private: int num; //书号 float price; //定价 int sellnum; //销售量 public: float sale() //计算销售额 { return price*sellnum; } }; class Book1:public Book //定义派生类Book1 { private: char type; //定义图书类别,新增加的数据成员 char name[40]; //书名,新增加的数据成员 char publisher[20]; //出版社,新增加的数据成员 public: void show() //显示图书信息,新增加的成员函数 { couttype:typeendl; coutname:nameendl; coutpublisher:publisherendl; } }; 9.1.3 派生类的构成 派生类中的成员包括两部分,一部分是从基类继承过来的成员,一部分是在声明派生类时新增加的成员,每一部分均包括数据成员和成员函数。 Book类和Book1类之间的继承关系 9.1.4 派生类的继承方式 当派生类的继承方式是公有继承(public)时,基类的public成员和protected成员的访问属性在派生类中保持不变,基类的private成员被继承到派生类中仍是基类的private成员。 1.公有继承 公有继承时成员的访问权限 当派生类的继承方式是私有继承(private)时,基类的public成员和protected成员被继承到派生类中成为private成员,基类的private成员被继承到派生类中仍为private成员。 2.私有继承 私有继承时成员的访问权限 当派生类的继承方式是保护继承(protected)时,基类的public成员和protected成员被继承到派生类中成为派生类的protected成员,基类的private成员被继承到派生类中仍为private成员。 3.保护继承 保护继承时成员的访问权限 继承方式与成员的访问属性 9.1.5 派生类的构造函数和析构函数 派生类名(总参数列表): 基类名(参数列表1),子对象名1(参数列表2),子对象名2(参数列表3),… { 派生类中新增数据成员的初始化语句 } 1.派生类的构造函数 执行构造函数的顺序是:派生类构造函数先调用基类的构造函数,对基类数据成员初始化,再执行派生类构造函数本身,对派生类数据成员初始化。 包含子对象的派生类构造函数的执行顺序是:派生类构造函数先调用基类的构造函数,对基类数据成员初始化;再调用子对象构造函数,对子对象数据成员初始化,最后执行派生类构造函数本身,对派生类数据成员初始化。 派生类析构函数没有函数类型、没有参数,其定义及使用方法与一般类的析构函数相同。派生类的析构函数用来对派生类中所增加的成员进行清理工作,同时系统会自动调用基类的析构函数和子对象的析构函数,对基类和子对象进行清理。 2.派生类的析构函数 析构函数的调用顺序与构造函数正好相反:先执行派生类的析构函数,然后调用子对象的析构函数,最后调用基类的析构函数,对基类进行清理。 class 派生类名 :继承方式1 基类名1,继承方式2 基类名2,… { 派生类新增加的成员; }; 9.2.1 多重继承的声明 例如: class A:public B,privateC,protected D { … }; 9.2.2 多重继承派生类的构造函数 派生类名(总参数列表): 基类名1(参数列表),基类名2(参数列表),… ,子对象名1(参数列表),子对象名2(参数列表),… { 派生类新增成员初始化语句; }; 多重继承构造函数的执行顺序与单继承相同,即先调用所有基类的构造函数,再调用子对象的构造函数,最后执行派生类构造函数。 9.2.3 二义性问题 当一个派生类继承的多个基类中有同名成
文档评论(0)