条款39:明智而审慎地使用private继承

  1. 当使用private继承的时候,编译器不会将derited自动转化为base
  2. 使用private继承来的所有成员,在派生类中都是private属性,无论它们在base中是public还是protected
  3. private继承的含义:
    • 根据某物实现出,但是当使用这一层面的含义的时候,请尽量使用“复合”(条款38)。
  4. 不能使用复合代替private继承的情况:当一个意欲成为derived class者想访问一个意欲成为base class这的protected成分,或为了重新定义一个或多个virtual函数。
    • 实现被继承,接口应略去
    • 即使面对virtual这种情况,使用复合来替换private继承是不合理的,更好的方法仍然不是private继承,而是public继承+复合的方式(P88)。这样可以降低widget(一个类)编译的依存性,并实现java中final(不允许重写基类中virtual函数)的效果
  5. 在考虑过所有其他方案之后,如果仍然认为private继承是“表现程序内两个classes之间的关系”的最佳办法,这才用它。通常需要考虑复合和public继承的结合。

你可能感兴趣的:(条款39:明智而审慎地使用private继承)