第11章继承与派生 11.1继承与派生的概念 11.2派生类的声明方式 11.3派生类的构成 11.4派生类成员的问属性 11.5派生类的构造函数和析构函数 11.6多重继承 11.7基类与派生类的转换 11.8继承与组合 11.9继承在软件开发中的重要意义
第11章 继承与派生 11.1 继承与派生的概念 11.2 派生类的声明方式 11.3 派生类的构成 11.4 派生类成员的访问属性 11.5 派生类的构造函数和析构函数 11.6 多重继承 11.7 基类与派生类的转换 11.8 继承与组合 11.9 继承在软件开发中的重要意义
面向对象程序设计有4个主要特点: 抽象 前面已述 封装 继承:本章介绍的重点机制,解决了软件重用问题。 多态性:第12章中将介绍 面向对象技术强调软件的可重用性 (software reusability)。C+语言提供了类 的继承
面向对象程序设计有4个主要特点: 抽象 封装 继承:本章介绍的重点机制,解决了软件重用问题。 多态性:第12章中将介绍 前面已述 面向对象技术强调软件的可重用性 (software reusability) 。C++语言提供了类 的继承
的概念 在C++中可重用性是通过继承(inheritance) 机制来实现的;继承是C++的一个重要组成 部分。 在不同的类中,数据成员和成员函数是不 相同的。但有时两个类的内容基本相同或 有一部分相同。 在第8章已举了马的例子来说明继承的概念 见图11.1示意
11.1 继承与派生 的概念 在C++中可重用性是通过继承(inheritance) 机制来实现的;继承是C++的一个重要组成 部分。 在不同的类中,数据成员和成员函数是不 相同的。但有时两个类的内容基本相同或 有一部分相同。 在第8章已举了马的例子来说明继承的概念 见图11.1示意
继承:就是在一个已有的类的基础上建立一个新类 已存在的类(例如“马”)称为“基类(base class)”或“父类(father class)” 新建立的类(例如“公马”)称为“派生类 (derived class)”或“子类(son class) 马 基类 公马 母马 派生类 白公马 黑公马 黄公马 白母马 黑母马 黄母马 图11.1 图11.2
已存在的类(例如“马”)称为“基类(base class)”或“父类(father class)”。 新建立的类(例如“公马”)称为“派生类 (derived class)”或“子类(son class)” 图11.1 图11.2 继承:就是在一个已有的类的基础上建立一个新类
类的继承:一个新类 类的派生从已有的类 从已有的类那里获得 [父类产生一个新的 其已有特性。 子类 父类的特 H 用已有的类来建立专 继承了基类的所有数 用类的编程技术 据成员和成员函数, 并可以对成员作必要 的增加或调整。 一个基类可以派生出多个派生类,每一个派生类又 可以作为基类再派生出新的派生类,因此基类和派 生类是相对而言的
类的继承:一个新类 从已有的类那里获得 其已有特性。 父类的特 性 类的派生从已有的类 (父类)产生一个新的 子类 用已有的类来建立专 用类的编程技术 继承了基类的所有数 据成员和成员函数, 并可以对成员作必要 的增加或调整。 一个基类可以派生出多个派生类,每一个派生类又 可以作为基类再派生出新的派生类,因此基类和派 生类是相对而言的
个派生类只从一个基类派生,这称为单继承 (single inheritance),这种继承关系所形成的 层次是一个树形结构,可以用图11.3表示。 A A3 32 A33 图11.3 在本书中约定,箭头表示继承的方向,从派 生类指向基类
在本书中约定,箭头表示继承的方向,从派 生类指向基类。 图11.3 一个派生类只从一个基类派生,这称为单继承 (single inheritance),这种继承关系所形成的 层次是一个树形结构,可以用图11.3表示
一个派生类不仅可以从一个基类派生,也可以从 多个基类派生。一个派生类有两个或多个基类的称 为多重继承(multiple inheritance),这种继承关 系所形成的结构如图11.4所示。 B C AC AB BC ABCI ABC2 ABC3 图11.4
图11.4 一个派生类不仅可以从一个基类派生,也可以从 多个基类派生。一个派生类有两个或多个基类的称 为多重继承(multiple inheritance),这种继承关 系所形成的结构如图11.4所示
关于基类和派生类的关系,可以表述为:派 生类是基类的具体化,而基类则是派生类的抽 象 学生 小学生 中学生 大学生 研究生 留学生 初中生 高中生 专科生 本科生 硕士生博士生 图11.5
关于基类和派生类的关系,可以表述为: 派 生类是基类的具体化,而基类则是派生类的抽 象 图11.5
11.2派生类的声明方式 在基类Student的基础上,单继承派生类Student1: class Student1:public Student //声明基类是Student public: void display_1() //新增加的成员函数 {cout<<"age:"<<age<<endl; cout<<"address:"<<addr<<endl;} private: int age; /新增加的数据成员 string addr; /新增加的数据成员 }
11.2 派生类的声明方式 在基类Student的基础上,单继承派生类Student1: class Student1: public Student //声明基类是Student {public: void display_1( ) //新增加的成员函数 {cout<<″age: ″<<age<<endl; cout<<″address: ″<<addr<<endl;} private: int age; //新增加的数据成员 string addr; //新增加的数据成员 };
public的称为“公用继承(public inheritance)” 声明派生类的一般形式为 class派生类名:[继承方式]基类名 派生类新增加的成员 public(公用的) 此项可选,若不 继承方式 private(私有的) 写,则默认为 private(私有的) protected(受保护的)
继承方式 public(公用的) private(私有的) protected(受保护的) 此项可选,若不 写,则默认为 private(私有的) public的称为“公用继承(public inheritance)” 声明派生类的一般形式为 class 派生类名: [继承方式] 基类名 { 派生类新增加的成员 } ;