C++程序设计第9章继承性和派生类.pptVIP

  • 10
  • 0
  • 约1.48万字
  • 约 41页
  • 2016-08-15 发布于重庆
  • 举报
C程序设计第9章继承性和派生类

2008-2009-2 第9章 继承性和派生类 第9章 继承性和派生类 本章内容提示 基类和派生类 多继承 虚基类 一、基类和派生类 什么是继承? 继承(inheritance)是用来描述两个类之间的关系,它也是用己知类定义一个新类的方法。 两个类之间关系: 包含关系/组合/聚合 嵌套关系 继承关系 一、基类和派生类 基类与派生类 通过继承机制 可以利用已有的类定义一个新类 已有类称为基类(base class) ,也称为父类 新类称为派生类(derived class) ,也称为子类、导出类 这个继承过程,我们称为派生。 单继承与多继承 单继承:派生类只有一个基类。 多继承:派生类可以有若干个基类。 1.派生类的定义格式 单继承时派生类定义格式如下: class 派生类名:继承方式 基类名 { 派生类中的新成员 }; 注意:每个类可以有多个派生类,但每个派生类只能有一个基类。 例:单继承定义 问题:如已定义了基类:Mammal类,如何定义一个派生类:Dog类。 1.派生类的定义格式 多继承时派生类定义格式如下: class 派生类名:继承方式1 基类名1,继承方式2 基类名2,… { 派生类中的新成员 }; 注意:每个类可以有多个派生类,每个派生类可以有多个基类。 例:多继承定义 问题:如已定义两个基类:Fan类和一个Lamp类,如何定义一个派生类:FanLamp类。 2.派生类的继承特性 派生类的继承特性是派生类从基类中继承过来的成员的可访问性。 继承方式的特性 派生类的访问权限 派生类的继承方式 public:公有继承 特点:继承基类中public和protected成员作为派生类的public和protected成员,即保持他们原有的访问权限,而基类中的private成员在派生类中不可访问。 private:私有继承 特点:继承基类中public和protected成员都作为派生类的private成员。 protected:保护继承 特点:继承基类中public和protected成员都作为派生类的protected成员。 public:公有继承 private:私有继承 protected:保护继承 派生类的访问权限 记忆口诀:基类中私有成员不可访问,公有继承权限都不变,私有(保护)继承权限都为私有(保护)。 类中成员的访问权限示意图 例9.1 : 问题:公有继承的实例。 例9.2 : 问题:私有继承的实例。 3.单继承 在单继承中,每个类可以有多个派生类,但是每个派生类只能有一个基类。 派生类的构造函数和析构函数 需要在派生类中的构造函数。 基类的构造函数和析构函数不能继承。 从基类继承下来的成员需要初始化成。 需要析构函数。 释放使用的资源。 功能: 负责调用基类的构造函数对基类成员进行初始化; 负责对基类的构造函数所需要的参数进行必要的设置。 建立派生类的构造函数与析构函数 构造函数定义格式 单继承方式的派生类构造函数的定义: [派生类名::]派生类构造函数名(参数表): 基类构造函数名(参数表),子对象名(参数表) { 派生类构造函数体 } 例9.3 : 问题:派生类构造函数和析构函数的实例。 二、多重继承 1.多继承概念与定义格式 多重继承,派生类可以有若干个基类,可以具有若干个基类的特征。 与单继承的主要区别: 多继承具有两个或两个以上的基类。 多重继承的定义形式: class 派生类名:访问方式 基类名1,访问方式 基类名2…… { 派生类中的新成员 }; 2.多继承的构造函数与析构函数 多继承的构造函数的定义格式: 类名(总参数表): 基类名1(参数表1),基类名2(参数表2)… 子对象名(参数表),… { 派生类构造函数的函数体 } 具有与单继承构造函数和析构函数相同的性质和特性。 继承构造函数和析构函数的执行顺序与单继承的相同。 注意:基类之间的执行顺序是严格按照声明时从左到右。 多继承派生类的析构函数中也应包含其基类的析构函数,该析构函数的执行顺序与其构造函数的执行顺序相反。 例9.5 : 问题:多继承的构造函数和析构函数的实例。 3.多继承中的二义性问题 多重继承中的主要问题是标识不唯一。 在派生类继承的这多个基类中有同名成员时,派生类中就会出现来自不同基类的同名成员,就出现了标识不唯一或二义性的情况,这在程序中是不允许的。 例如: 问题解决: 解决这个问题的办法有三种: 使用作用域运算符“∷”; 使用同名覆盖的原则; 在派生类中重新定义与基类中同名的成员 使用虚函数。 例9.4

文档评论(0)

1亿VIP精品文档

相关文档