9.2 类的继承
当我们以一个类为基础定义另一个类时,后者被称为派生类。派生类自动包含用来定义自己的那个类的所有数据成员,还有条件地包含了函数成员。我们说该类继承了基类的数据成员和函数成员。
派生类不继承的基类成员仅有析构函数、构造函数以及任何重载赋值运算符的成员函数。所有其他函数成员,连同基类的所有数据成员,都将被派生类继承。当然,某些基类成员不被继承的原因是派生类总是有自己的构造函数和析构函数。如果基类有赋值运算符,派生类也将提供自己的版本。我们说这些函数不被继承,意思是它们不会作为派生类对象的成员存在。但正如我们即将看到的那样,它们仍然作为某个对象的基类组成部分而存在。
9.2.1 基类的概念
任何用作定义其他类的基础的类都是基类。例如,如果我们直接根据类A定义类B,则A是B的直接基类。在图9-1中,CCrate类是CBeerCrate的直接基类。当根据另一个类CCrate定义某个类时-- 比如说CBeerCrate,我们就说CBeerCrate是从CCrate派生的。因为CCrate本身又是根据CBox类定义的,所以说CBox是CBeerCrate的间接基类。我们即刻就将看到如何在类定义中表示这种关系。图9-2说明了派生类继承基类成员的方式。
|
| (点击查看大图)图 9-2 |
仅仅因为成员函数被继承,并不意味着我们不需要在派生类中将它们替换成新版本,必要时我们当然可以这样做。