有时候程序员想利用现有的基类(即通过派生类使用现有的功能),但没有is-a关系,在这种情况下,私有继承就可以有用了。
使用私有继承,基类的公有成员和保护成员都将成为派生类的私有成员。这意味着基类方法将不会称为派生对象公有接口的一部分,但可以在派生类的成员函数中使用它们。使用私有继承,基类的公有方法将成为派生类的私有方法。简而言之,派生类不继承基类的接口。使用私有继承,类将继承实现。
聚合将对象作为一个命名的成员对象添加到类中,而私有继承将对象作为一个未被命名的继承对象添加到类中。
聚合与使用私有继承相比,使用聚合的另一个不明显的优点是,这消除了继承层次结构,从而避免了“使用虚方法的代价”以及,讨论的v-table,进而可提高性能。
私有继承的优点可以归纳为:
1.派生类能够访问基类的保护成员函数
2.派生类可以覆盖基类的虚函数:
但与这些优点相伴而行的是如下代价:
1.在多程序员编程环境中,代码的灵活度降低,更容易出错
2.继承带来的性能问题
因此,在可以使用聚合或组合的情况下,最好避免使用私有继承。
在下实力有限,若文章有问题,希望大家指出问题。