C++语言程序设计

派生类是与基类有一定联系的，基类是描述一个事物的一般特征，而派生类有比基类更丰富的属性和行为。比如正文中的例子，基类是一个二维点的模型，派生类从一个二维点模型中派生，添加了第三维向量和相应函数，生成了一个三维点模型。继承的一般形式如下：
class 派生类:访问权限 基类
{
…
}
如果需要，派生类可以从多个基类继承，也就是多重继承，这将在后面章节中讲解。通过继承，派生类自动得到了除基类私有成员以外的其它所有数据成员和成员函数，在派生类中可以直接访问，从而实现了代码的复用。
从概念上讲，基类和派生类的关系与类和对象的关系有着根本的不同。比如说，我们定义了猫科动物类：
class felid
{
//类中定义了猫科动物的基本特征
};
现在由于某种需要，我们想对猫这个动物进行定义。猫是猫科动物的一种，很自然，我们就想到从猫科动物这个类里面派生：
class cat: public felid
{
char name[20] //名字
char color[80] //毛色
cat();
cat(char* name, char* color);
}
在类cat中，示意性地定义了两个变量。我们知道，对象是类的一个实例，而在这里，cat还是一个类，一个更加具体的类，不是felid类的对象，这一点要分辨清楚。我们可以定义猫的一个对象（实例）：
cat mycat("Jack","bronze");
mycat才是一只实实在在的猫对象。
派生类对象生成时，要调用构造函数进行初始化。编译器的调用过程是先调用基类的构造函数，对派生类中的基类数据进行初始化，然后再调用派生类自己的构造函数，对派生类的数据进行初始化工作。当然，在派生类中也可以更改基类的数据，只要它有访问权限。
基类数据的初始化要通过基类的构造函数，而且，它要在派生类数据之前初始化，所以基类构造函数在派生类构造函数的初始化表中调用：
派生类名 (参数表1)：基类名（参数表2）
其中"参数表1"是派生类构造函数的参数，"参数表2"是基类构造函数的参数。通常情况下，参数表2中的参数是参数表1的一部分。也就是说，用户应该提供给派生类所有需要的参数，包括派生类和基类的。事实上也是这样，派生类继承了基类的成员变量，就相当于是自己的一部分，当然有责任对基类的变量进行初始化，只不过对于基类成员的初始化要借助于基类的构造函数而已。如果派生类构造函数没有显式调用基类的构造函数，编译器也会先调用基类的缺省参数的构造函数，对基类数据进行初始化。如果派生类自己也没有显式定义构造函数，那么编译器会为派生类定义一个缺省的构造函数，在生成派生类对象时，仍然先调用基类的构造函数。所以，派生类没有定义构造函数的话，必须保证基类有缺省参数的构造函数。