目录
关于继承与派生
这一块全是按书上所了解的来写的,算是一些引言吧,看看也还是有用的,对自己所学的多掌握一些没毛病。
在面向对象中,该技术强调软件的可重用性,而在C++中可重用性便是通过 “继承” 这一机制来实现的。一个新类从已有的类那里获得其已有的特性,这种现象称为类的继承。同时继承也是C++ 和 C 语言最重要的区别之一。
派生类继承了基类的所有数据成员和成员函数,并可以对成员作必要的增加或者调整,一个基类可以派生出多个派生类,每一个派生类又可以作为基类再派生出新的基类,因此基类和派生类是相对而言的,而一代代的派生下去就形成了类的继承层次结构。同样,类的每一次派生都继承了其基类的基本特征。
一个派生类只从一个基类派生,这称为单继承,这种继承关系所形成的层次是一个树形结构(一个基类可以派生多个子类,一个子类可以由 多级 基类派生而来。);而一个派生类有两个或者多个基类的称为多重继承。见图:
基类和派生类之间的关系可以形容为:派生类是基类的具体化,基类是派生类的抽象。
继承有什么用处:
- 有许多基类是被程序的其他部分所使用的,这些程序要求保留原有的积累不被破坏,使用继承是建立新的数据类型,它继承了基类的所有特征,但不改变基类本身。基类的名称。构成和访问属性都不会被改变,也不会影响其他程序所使用。
- 用户往往是得不到基类的源代码。如果想修改已有的类,必须掌握类的声明和类的实现(成员函数的定义)的源代码。但是,如果使用类库,用户是无法知道成员函数的代码的,因此也就无法对基类进行修改,保证了基类的安全。
- 在类库中,一个基类可能已被指定与用户所需的多种组件建立了某种关系,因此在类库中的基类是不允许修改的(即使知道了源代码,也不允许修改)。
- 实际上有许多基类并不是从已有的其他程序中选取来的,而是专门作为基类设计的。有些基类可能并没有什么独立的功能,只是一个框架,或者说是抽象类。用户根据需要设计了一批能适用于不同用途的通用类,目的是建立通用的数据结构,以便用户在此基础上添加各种功能,建立各种功能的派生类。
- 在面向对象程序设计中,需要设计类的层次结构,从最初的抽象类出发,每一层派生类的建立都逐步向着目标的具体实现前进,换句话说,是不断从抽象到具体的过程。每一层的派生和继承都需要站在整个系统的角度统一规划,精心组织。
派生的声明与构成
声明派生类的一般形式为:
class 派生类名 : [继承方式] 基类名
{
派生类新增加的成员
};
继承方式包括 : public (公用的)、private(私有的)、protected(受保护的)。即同类的访问权限类似。继承方式如果不写默认的是 private(私有的)。
派生类中的成员包括从基类继承过来的成员和其自己增加的成员两大部分。在构造一个派生类时包括三部分工作:
- 从基类接受成员:派生类把基类中全部的成员(不包括构造函数和析构函数)接受过来,也就是说没有选择的,不能选择接受其中一部分,而舍弃另一部分成员。这样就可能出现一种情况:有些基类的成员在派生类中是用不到的,但也要继承过来,这样就可能造成数据的冗余&#x