第5章程序的类层次结构
第5章 程序的类层次结构
第5章程序的类层次结构 类的继承与派生 类层次中成员函数名的多态性
第5章 程序的类层次结构 ❖ 类的继承与派生 ❖ 类层次中成员函数名的多态性
派生 面向对象的程序设计的一个重要特点是允许 以既有类(也称基类),以其为基础导出 (定义)新的类(也称派生类)。这一过程 称为派生 令派生时不需要把既有类的相关代码重新书写 遍,只需要指明是以哪个类为基类,便可 以将基类中的有关特征继承过来,实现了部 分代码的可重用
派生 ❖ 面向对象的程序设计的一个重要特点是允许 以既有类(也称基类),以其为基础导出 (定义)新的类(也称派生类)。这一过程 称为派生 ❖ 派生时不需要把既有类的相关代码重新书写 一遍,只需要指明是以哪个类为基类,便可 以将基类中的有关特征继承过来,实现了部 分代码的可重用
类的继承与派生 派生方式 派生类的构造函数与释放函数 多基派生 虚基类 类层次中成员名的作用域 类层次中的类转换
类的继承与派生 ❖ 派生方式 ❖ 派生类的构造函数与释放函数 ❖ 多基派生 ❖ 虚基类 ❖ 类层次中成员名的作用域 ❖ 类层次中的类转换
派生方式 冷 public派生与 private派生 冷 Protected成员与 protected派生
派生方式 ❖ public派生与private派生 ❖ Protected成员与protected派生
pub派生与 private派生 C++允许程序员用下边的格式用一个类派生它的子 类 cass派生类名:派生方式基类名 private: 新增私有成员声明语句表列 public: 新增公开成员声明语句表列
public派生与private派生 ❖ C++允许程序员用下边的格式用一个类派生它的子 类: class 派生类名 : 派生方式 基类名 { private: 新增私有成员声明语句表列 public: 新增公开成员声明语句表列 };
两种派生方式的特点 冷1)无论哪种派生方式,基类中的 private成员 在派生类中都是不可见的。也就是说,基底 类中的 private成员不允许外部函数或派生类 中的任何成员访问。 冷2)pUb派生时,基类中的 public成员相当 于派生类中的 public成员 冷3) private派生时,基类中的pubc成员相当 于派生类中的 private成员
两种派生方式的特点 ❖ 1)无论哪种派生方式,基类中的private成员 在派生类中都是不可见的。也就是说,基底 类中的private成员不允许外部函数或派生类 中的任何成员访问。 ❖ 2)public派生时,基类中的public成员相当 于派生类中的public成员。 ❖ 3)private派生时,基类中的public成员相当 于派生类中的private成员
派生后基类成员访问性的变化 基类成员的 private public 访问性 派生方 private ublic private public 式 派生类成 不可见 可见 可见 外 员部数 不可见 可见
派生后基类成员访问性的变化 基类成员的 访问性 private public 派 生 方 式 private public private public 派 生 类 成 员 不可见 可见 可见 外 部 函 数 不可见 可见
定义 Location—Pont类层次结构 class Location( ∥基类接口定义 public XX Pos. mY P ∥位置的坐标,以像素点计 Location( int X, int y ∥构造函数初始化位置坐标 int getx ∥返回当前位置的x坐标 Int getY(): ∥返回当前位置的y坐标 enum BOOLEAN I FALSE, TRUE J ∥定义一个布尔类型 class Point: private Location( ∥派生类接口定义 BOOLEAN vIsible: ∥可见性变量 Public Point(int x, int y) ∥构造函数,初始化点的位置 BOOLEAN is Visible O;/返回当前点是否可见 Void show() ∥显示当前点 Void ∥隐藏当前点 moveTo ( ∥移动当前点
定义Location—Point类层次结构 class Location{ // 基类接口定义 public: int mX_Pos, mY_Pos; // 位置的坐标,以像素点计 Location ( int x, int y); // 构造函数,初始化位置坐标 int getX ( ); // 返回当前位置的x坐标 int getY ( ); // 返回当前位置的y坐标 }; enum BOOLEAN { FALSE,TRUE }; // 定义一个布尔类型 class Point : private Location{ // 派生类接口定义 BOOLEAN mVisible; // 可见性变量 Public: Point(int x, int y); // 构造函数,初始化点的位置 BOOLEAN isVisible ();// 返回当前点是否可见 Void show ( ); // 显示当前点 Void hide ( ); // 隐藏当前点 Void moveTo ( ); // 移动当前点 };
Protected成员与 protected派生 protected成员是一种血缘关系内外有别的成员。它 只为它所在类中的方法和由它直接派生的类方法可 见 冷 private、 protected,、pub|ic作为类成员的可见性修 饰符,将产生如下影响: 1)在一个类中定义的方法函数,可以访间本类中的 任何成员,但只能访问基类中的 protected成员和 pubi成员; 2)一个类对象,只能使用本类或其pubc派生基类 中的 public成员
Protected成员与protected派生 ❖ protected成员是一种血缘关系内外有别的成员。它 只为它所在类中的方法和由它直接派生的类方法可 见 ❖ private、protected,、public作为类成员的可见性修 饰符,将产生如下影响: 1) 在一个类中定义的方法函数,可以访问本类中的 任何成员,但只能访问基类中的protected成员和 public成员; 2) 一个类对象,只能使用本类或其public派生基类 中的public成员