14.7.2 私有继承

通过在基类表中去掉public或者通过显式地声明private,可以私有地继承基类(后者可能是更好的策略,因为可以让用户明白它的含义)。当私有继承时,我们是“照此实现”;也就是说,创建的新类具有基类的所有数据和功能,但这些功能是隐藏的,所以它只是部分的内部实现。该类的用户访问不到这些内部功能,并且一个对象不能被看做是这个基类的实例(正如在FName2.Cpp中的)。

我们可能奇怪,private继承的目的是什么,因为在这个新类中使用组合创建一个private对象的选择似乎更合适。为了完整性,private继承被包含在该语言中。但是,如果不为了其他理由,则应当减少混淆,所以通常希望使用组合而不是private继承。然而,这里可能偶然有这种情况,即可能想产生像基类接口一样的接口部分,而不允许该对象的处理像一个基类对象。private继承提供了这个功能。

14.7.2.1 对私有继承成员公有化

当私有继承时,基类的所有public成员都变成了private。如果希望它们中的任何一个是可视的,只要用派生类的public部分声明它们的名字即可:

14.7.2 私有继承 - 图1

这样,如果想要隐藏基类的部分功能,则private继承是有用的。

注意给出一个重载函数的名字将使基类中所有它的重载版本公有化。

在使用private继承取代组合之前,应当仔细考虑,当与运行时类型标识相连时,私有继承特别复杂(这是本书第2卷中一章的主题,可从www.BruceEckel.com处下载)。