类的继承与派生
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学生类:
姓名、性别、年龄、身高、体重、学号、班级、专业 间接基类
人类
直接基类
教师类
管理人员类
学生类
单继承:派生类 只有一个基类
教师管理人员类
多继承:派生类 有多个基类
6
C++面向对象程序设计
包头钢铁职业技术学院
继承与派生的目的
继承的目的:实现代码重用。 派生的目的:当新的问题出现,原有 程序无法解决(或不能完全解决)时, 需要对原有程序进行改造。
5.2.1 公有继承 5.2.2 私有继承 5.2.3 保护继承
11
C++面向对象程序设计
包头钢铁职业技术学院
5.2.1 公有继承
类的继承方式为公有继承的时候,基 类的公有和保护成员在派生类中访问 权限不变,而基类的私有成员在派生 类中不可直接访问。 公有继承的应用举例。
class Circle: public Point {private: float r; public: void Start(float X, float Y, float R) {Point::Start(X,Y); r=R;} float GetR() {return r;} };
包头钢铁职业技术学院
5.1 继承与派生
5.1.1 基类与派生类 5.1.2 派生类的声明 5.1.3 派生类生成过程
3
C++面向对象程序设计
包头钢铁职业技术学院
5.1.1 基类与派生类
以原有的类为基础产生新类,我们就 说从原有的类派生出新类。在这个过 程中原有的类称为基类,新类称为派 生类。
5.3.1 构造函数 5.3.2 析构函数
包头钢铁职业技术学院
16
C++面向对象程序设计
包头钢铁职业技术学院
5.3.1 构造函数
因为基类的构造函数不被继承,派生 类中需要声明自己的构造函数。 声明构造函数时,只需要对本类中新 增成员进行初始化,对继承来的基类 成员的初始化,自动调用基类构造函 数完成。 派生类的构造函数需要给基类的构造 函数传递参数
8
C++面向对象程序设计
包头钢铁职业技术学院
5.1.2 派生类的声明
基类1 基类2
。。。
基类n
基类
派生类1
派生类1
多继承和单继承
9
C++面向对象程序设计
包头钢铁职业技术学院
5.1.3 派生类生成过程
派生类生成过程中需要指定派生类的类名, 继承方式和新增成员。 派生类的生成过程可分为三个步骤:吸收 基类成员﹑改造基类成员和添加新的成员。
– 汽车类派生出卡车类。在此过程中,我们 称汽车类为基类,卡车类为汽车类的派生 类。
面向对象程序设计提供了类的继承机 制,该机制自动的为派生类提供了其 基类的操作和属性,大大的提高了代 码的重用率。
4
C++面向对象程序设计
包头钢铁职业技术学院
5.1.1 基类与派生类
交通工具 汽车
小汽车
卡车
旅行车
7
C++面向对象程序设计
包头钢铁职业技术学院
5.1.2 派生类的声明
C++中声明派生类的形式为: class 派生类名: 继承方式 基类名1, 继承方式 基 类名2, …,继承方式 基类名n { 派生类的成员声明; };
声明中的“基类名”是已经存在的类的名称,“派 生类名”是在已存在的类的基础上通过添加成员而 得到的新类。当派生类只有一个直接基类的继承情 况,称为单继承。当派生类同时有多个基类的继承 情况,称为多继承。
C++面向对象程序设计
第5章 类的继承与派生
包头钢铁职业技术学院
1
C++面向对象程序设计
包头钢铁职业技术学院
第5章 类的继承与派生
5.1 继承与派生 5.2 继承的三种方式 5.3 派生类的构造函数和析构函数 5.4 多继承和虚基类 5.5 赋值兼容规则
2wk.baidu.com
C++面向对象程序设计
14
C++面向对象程序设计
包头钢铁职业技术学院
基类与派生类的对应关系
单继承
– 派生类只从一个基类派生。
多继承
– 派生类从多个基类派生。
多重派生
– 由一个基类派生出多个不同的派生类。
多层派生
– 派生类又作为基类,继续派生新的类。
15
C++面向对象程序设计
5.3 派生类的构造函数和析构函 数
– 吸收基类成员:将基类除构造函数和析构函数 以外的成员全部接受。 – 改造基类成员:根据继承方式决定基类成员在 派生类中的访问控制问题。 – 添加新的成员:派生类新增成员是派生类不同 于基类的地方,也是继承和派生机制的关键所 在。
10
C++面向对象程序设计
包头钢铁职业技术学院
5.2 继承的三种方式
12
C++面向对象程序设计
包头钢铁职业技术学院
5.2.2 私有继承
类的继承方式为私有继承的时候,基 类中的公有和保护成员被吸收后成为 派生类的私有成员,而基类的私有成 员在派生类中不可直接访问。 私有继承应用举例。
class Circle: private Point {private: float r; public:void Start(float X, float Y, float R) {Point::Start(X,Y); r=R;} float GetX() {return Point::GetX();} float GetY() {return Point::GetY();} };
工具车
轿车
面包车
交通工具分类层次图
5
C++面向对象程序设计
包头钢铁职业技术学院
5.1.1 基类与派生类
人类: 教师类: 管理人员类: 姓名、性别、年龄、身高、体重 姓名、性别、年龄、身高、体重、专业、职称 姓名、性别、年龄、身高、体重、职务 教师管理人员类: 姓名、性别、年龄、身高、体重、专业、职称、职务
13
C++面向对象程序设计
包头钢铁职业技术学院
5.2.3 保护继承
当类的继承方式为保护继承的时候, 基类中的公有和保护成员被吸收后成 为派生类的保护成员,而基类中的私 有成员在派生类中不可直接访问。 保护继承的例子。
class Circle: protected Point {private: float r; public: void Start(float X, float Y, float R) {Point::Start(X,Y); r=R;} float GetR() {return r;} float GetY() {return Point::GetY();} };