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