非公開継承・実装継承

private-inheritance.png

非公開派生(private derivation)、とも言う。
実装継承implementation inheritanceともいう。

private継承の振る舞い

  • たとえ基底クラスでpublicなメンバだったとしても、派生クラスではprivateメンバになる。1
  • 基底クラスに型変換できなくなる

どんなときに使う?

普通に公開継承すると、
いやなのが、親クラスに自動的に型変換できてしまうこと。

 CChild ch;
 CParent pa=ch;//ok!

なんで嫌なのか知らんが。
これを避けたいならば、2つの方法がある。
  1. CParentをメンバにする。
  2. CParentをprivateで継承する

1.の欠点は、仮想関数の上書きができなくなってしまうこと。

CChild : private CParent{};

非公開派生は、上書きの問題を除けば、包含と同じである。

意味

それを実装手段とする
という意味
クラスDをクラスBからprivateに継承するのは、クラスBにある既存のコードを一部流用したいからであって、
B型のオブジェクトとD型のオブジェクトに概念上の関係があるからではない。
もっというと
実装だけを継承してインターフェイスは無視せよという意味である。
private継承はソフトウェアデザインの段階では何の意味もない。
これが意味を持つのはソフトウェア実装の段階である。

private継承の使い時

サポートサイト Wikidot.com