第10章 继承与派生 ◆10.1单一继承 ◆102多重继承 10.3虚基类
第10章 继承与派生 10.1 单一继承 10.2 多重继承 10.3 虚基类
C+语言程序设计教程与实验 第十章继承与派生 101单一继承 C+的重要性能之一是代码重用。为了达到这 个目的,C++采用两种方法:对象成员和继承。在 面向对象的程序设计中,大量使用继承和派生。类 勺派生实际是一种演化、发展过程。即通过扩展 更改和特殊化,从一个已知类出发建立一个新类。 通过类的派生可以建立具有共同关键特征的对象家 族,从而实现代码重用。这种继承和派生的杋制对 于已有程序的发展和改进是极为有利的
10.1 单一继承 C++的重要性能之一是代码重用。为了达到这 个目的,C++采用两种方法:对象成员和继承。在 面向对象的程序设计中,大量使用继承和派生。类 的派生实际是一种演化、发展过程,即通过扩展、 更改和特殊化,从一个已知类出发建立一个新类。 通过类的派生可以建立具有共同关键特征的对象家 族,从而实现代码重用。这种继承和派生的机制对 于已有程序的发展和改进是极为有利的。 C++语言程序设计教程与实验 第十章 继承与派生
C++语言程序设计教程与实验 第十章继承与派生 派生类同样也可以作为基类再派生新的类,这 样就形成了类的层次结构类的继承和派生的层次 结构,可以说是人们对自然界中的事物进行分类、 分析和认识的过程在程序设计中的体现。现实世界 中的事物都是相互联系、相互作用的,人们在认识 过程中,根据事物的实际特征。抓住其共同特性和 细小差别。利用分类的方法进行分析和描述这些实 体或概念之间的相似点和不同点
派生类同样也可以作为基类再派生新的类,这 样就形成了类的层次结构.类的继承和派生的层次 结构,可以说是人们对自然界中的事物进行分类、 分析和认识的过程在程序设计中的体现。现实世界 中的事物都是相互联系、相互作用的,人们在认识 过程中,根据事物的实际特征,抓住其共同特性和 细小差别,利用分类的方法进行分析和描述这些实 体或概念之间的相似点和不同点。 C++语言程序设计教程与实验 第十章 继承与派生
C++语言程序设计教程与实验 第十章继承与派生 派生类具有如下特点: (1)新的类可在基类所提供的基础上包含新的成员; (2)在新的类中可隐藏基类的成员函数; (3)可为新类重新定义成员函数。 基类与派生类的关系如下: 1)派生类是基类的具体化 (2)派生类是基类定义的延续 (3)派生类是基类的组合
C++语言程序设计教程与实验 第十章 继承与派生 派生类具有如下特点: (1) 新的类可在基类所提供的基础上包含新的成员; (2) 在新的类中可隐藏基类的成员函数; (3) 可为新类重新定义成员函数。 基类与派生类的关系如下: (1) 派生类是基类的具体化 (2) 派生类是基类定义的延续 (3) 派生类是基类的组合
C++语言程序设计教程与实验 第十章继承与派生 10.1.2派生类的定义 定义:在C艹中,派生类的定义如下 class:[继承方式]基类名〉 派生类成员声明; 其中: (1) class是类声明的关键字,用于告诉编译器下面声明的是一个类。 (2)派生类名是新生成的类名
10.1.2 派生类的定义 C++语言程序设计教程与实验 第十章 继承与派生 定义: 在C++中,派生类的定义如下: class:[继承方式] { 派生类成员声明; }; 其中: (1) class是类声明的关键字,用于告诉编译器下面声明的是一个类。 (2) 派生类名是新生成的类名
C++语言程序设计教程与实验 第十章继承与派生 在C++程序设计中,进行派生类的定义,给出该类的成 员函数的实现之后,整个类就定义好了,这时就可以由它来 生成对象进行实际问题的处理。派生新类的过程,经历了 个步骤:吸收基类成员,改造基类成员和添加新的成员,下 面分别介绍: (1)吸收基类成员 面向对象的继承和派生机制,其最主要的目的是实现代 码的重用和扩充。因此,吸收基类成员就是一个重用的过程 ,而对基类成员进行调整、改造以及添加新成员就是原有代 码的扩充过程,二者是相辅相成的。 在C++的类继承中,首先是基类成员的全盘吸收,这样, 派生类实际上就包含了它的所有基类的除构造函数和析构函 数之外的所有成员。尽管很多基类的成员,特别是非直接基 类的成员,在派生类中很可能根本不起作用
在C++程序设计中,进行派生类的定义,给出该类的成 员函数的实现之后,整个类就定义好了,这时就可以由它来 生成对象进行实际问题的处理。派生新类的过程,经历了三 个步骤:吸收基类成员,改造基类成员和添加新的成员,下 面分别介绍: (1) 吸收基类成员 面向对象的继承和派生机制,其最主要的目的是实现代 码的重用和扩充。因此,吸收基类成员就是一个重用的过程 ,而对基类成员进行调整、改造以及添加新成员就是原有代 码的扩充过程,二者是相辅相成的。 在C++的类继承中,首先是基类成员的全盘吸收,这样, 派生类实际上就包含了它的所有基类的除构造函数和析构函 数之外的所有成员。尽管很多基类的成员,特别是非直接基 类的成员,在派生类中很可能根本不起作用 C++语言程序设计教程与实验 第十章 继承与派生
C++语言程序设计教程与实验 第十章继承与派生 ,也被继承下来,在生成对象时也要占据一定的内存 空间,造成资源浪费,我们可以对其进行改造。 (2)改造基类成员 对基类成员的改造包括两方面,一是依靠派生类 的继承方式来控制基类成员的访问,二是对基类数据 成员或成员函数的覆盖,即在派生类中定义一个和基 类数据成员或成员函数同名的成员,由于作用域不同 生同名覆盖,基类中的成员就被替换成派生类中 的同名成员
,也被继承下来,在生成对象时也要占据一定的内存 空间,造成资源浪费,我们可以对其进行改造。 (2) 改造基类成员 对基类成员的改造包括两方面,一是依靠派生类 的继承方式来控制基类成员的访问,二是对基类数据 成员或成员函数的覆盖,即在派生类中定义一个和基 类数据成员或成员函数同名的成员,由于作用域不同 ,产生同名覆盖,基类中的成员就被替换成派生类中 的同名成员。 C++语言程序设计教程与实验 第十章 继承与派生
C++语言程序设计教程与实验 第十章继承与派生 (3)继承方式规定了如何访问从基类继承的成员。继承 方式关键字为 private、 public和 protected,分别表示私有 继承、公有继承和保护继承,缺省情况下是私有 private继承。 类的继承方式指定了派生类成员以及类外对象对于从基类继 承来的成员的访问权限,这将在10.1.3小节中详细介绍。 (4)派生类成员指除了从基类继承来的所有成员之外, 还包括新增加的数据成员和成员函数。这些新增的成员正是 派生类不同于基类的关键所在,是派生类对基类的发展。当 重用和扩充已有的代码时,就是通过在派生类中新增成员来 添加新的属性和功能。 例如,定义如下的汽车类及其派生类小汽车类和卡车类:
(3) 继承方式规定了如何访问从基类继承的成员。继承 方式关键字为private、public和protected,分别表示私有 继承、公有继承和保护继承,缺省情况下是私有private继承。 类的继承方式指定了派生类成员以及类外对象对于从基类继 承来的成员的访问权限,这将在10.1.3小节中详细介绍。 (4) 派生类成员指除了从基类继承来的所有成员之外, 还包括新增加的数据成员和成员函数。这些新增的成员正是 派生类不同于基类的关键所在,是派生类对基类的发展。当 重用和扩充已有的代码时,就是通过在派生类中新增成员来 添加新的属性和功能。 例如,定义如下的汽车类及其派生类小汽车类和卡车类: C++语言程序设计教程与实验 第十章 继承与派生
C++语言程序设计教程与实验 第十章·继承与派生 例如,定义如下的汽车类及其派生类小汽车类和卡车类: class vehicle //定义基类 vehicle public //公有函数成员 void init vehicle(int in wheels, float in weight); //3A 数据成员初始化 int get wheels //取车轮数 float get weight o;//取汽车重量 float wheelloading(;//车轮承重 private //私有数据成员 int wheels //车轮数 float weight //表示汽车承重
例如,定义如下的汽车类及其派生类小汽车类和卡车类: class vehicle //定义基类vehicle { public: //公有函数成员 void init vehicle(int in_wheels,float in_weight);//给 数据成员初始化 int get_wheels(); //取车轮数 float get_weight(); //取汽车重量 float wheelloading(); //车轮承重 private: //私有数据成员 int wheels; //车轮数 float weight; //表示汽车承重 }; C++语言程序设计教程与实验 第十章 继承与派生
C++语言程序设计教程与实验 第十章继承与派生 在基类 vehicle的基础上,定义了如下的派生类car和 truck,在 派生类中新增了一些数据成员和成员函数 class car. public vehicle //定义派生类car ◇、 int passenger load;//新增私有数据成员,表示载客数 tbl //新增公有成员函数 void initialize(int in wheels, float in weight, int people=4) int passengers class truck: public vehicle
在基类vehicle的 基础上,定义了如下的派生类car和truck,在 派生类中新增了一些数据成员和成员函数 class car:public vehicle //定义派生类car { int passenger_load; //新增私有数据成员,表示载客数 public: //新增公有成员函数 void intitialize(int in_wheels,float in_weight,int people=4); int passengers(); }; class truck:public vehicle C++语言程序设计教程与实验 第十章 继承与派生