第四讲 继承与派生.ppt

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

第4章 继承与派生 主讲:王 建 兴 闽江学院物理学与电子信息工程系 继承的概念 所谓继承(inheritance)就是利用已有的数据类型定义出新的数据类型。 在继承关系中,被继承的类称为基类(base class)(或父类),而通过继承关系定义出来的新类则成被称为派生类(derived class)(子类)。 基类 派生类 inheritance 继承的概念 派生类即可以对基类的性质进行扩展又可以对基类进行限制。 一个派生类既可以从一个基类派生也可以从多个基类派生。从一个基类派生称为单继承;从多个基类派生称为多继承。 继承的概念 (1)单继承 class 派生类名:继承方式 基类名 { 派生类中的新成员 }; 继承的概念 (2)多重继承 class 派生类名:访问方式 基类名1,访问方式 基类名2…… { 派生类中的新成员 }; 继承的概念 (3)继承方式 公有继承(public) 私有继承(private) 保护继承(protected) 继承方式访问控制 一是派生类中新增成员对从基类继承来的成员的访问; 二是派生类的外部通过派生类的对象对从基类继承来的成员的访问。 单继承—基类与派生类 例子分析可得到以下信息: 在构造派生类对象之前,先构造基类对象; 在派生类中,不能访问基类的私有成员;但可以访问基类的保护、公有成员; 在派生类与基类的外面,不能访问无论基类还是派生类的私有成员、保护成员,但可以访问派生类中公有成员。如果是公有派生,还可以访问基类的公有成员; 析构派生类对象后,还析构由派生类对象中构造基类对象。 在派生关系中有以下几个问题需要解决: 1、当派生类成员(成员函数)与基类成员(成员函数)原型一样时,将隐藏基类成员。如果原型不一样,将是函数重载。 那么如何在派生类中及外部(需是公有派生)调用被隐藏的基类成员呢? 使用方法是:基类名::基类成员(函数)。 单继承—基类与派生类 在派生关系中有以下几个问题需要解决: 2、如何定义派生类的构造函数 派生类名::派生类构造函数名(参数表) : 基类构造函数名(参数名表) { //派生类构造函数的函数体 } 单继承—基类与派生类 3、基类对象与派生类对象的赋值 派生类对象与基类对象之间关系可以表示为“is a”,即派生类对象“是一个”基类对象。 派生类对象可以赋值给基类对象,反之不行 单继承—基类与派生类 同样,如果有一个指针(引用),只能是基类的指针(引用)指向(引用)派生类对象。反之不行。 一个基类指针(引用)指向(引用)派生类对象后,也只能访问继承到派生类的公有成员,而不能访问派生类本身的公有成员; 单继承—基类与派生类 派生类的生成过程 从基类派生新类经历了三个步骤: (1)吸收基类成员 (2)改造基类成员 一是基类成员的访问方式问题 二是对基类数据成员或成员函数的覆盖 (3)添加新成员 多继承 — 基本概念 多继承就是一个子类有多个基类。多继承的访问的规则和单继承相同。 多继承—构造造函数与析构函数 派生类构造函数定义格式如下: 派生类名::派生类构造函数名(参数表):基类名1(参数名表1),基类名2(参数名表2),…… { //派生类构造函数的函数体 } 派生类构造执行次序为: ①调用基类构造函数,调用顺序按照他们被继承时说明的顺序(从左向右); ②调用子对象的构造函数(如果在派生类中存在子对象的话,即派生类为容器类); ③执行派生类构造函数的函数体。 析构函数执行顺序执行构造函数时的顺序正好相反。 多继承—构造造函数与析构函数 多继承—二义性问题 产生二义性的情况: 当两个或多个基类中有相同的成员。 当两个或多个基类继承自同一个祖先。 解决两义性的方式 使用域运算符,方式是:父类名::成员名。 虚基类 (解决共同祖先的二义性) 多继承—虚基类 Person Father   Mother  Son 多继承—虚基类 声明虚基类: class 派生类名 : virtual 访问方式 基类名 { //声明派生类成员 }; 引入虚基类后,构造函数与析构函数的顺序 ? (1)一个类的所有直接基类中,虚基类的构造函数在非虚基类之前调用; (2)如果在一个类的所有直接基类中有多个虚基类,则这些虚基类的构造函数的执行顺序与在派生类中说明的次序相同; 多继承—虚基类

文档评论(0)

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

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

1亿VIP精品文档

相关文档