先日の多態について少し補足。 継承を使うときの考え方として、"実装の継承"と"インタフェースの継承"があります。 前者は再利用するための継承、後者は再利用されるための継承です。 ところが、C++に限らず、一般的な継承の仕組みは、実装とインタフェースの両方を継承してしまい、クラスの肥大化や冗長化を招きやすくなっています(JavaやC#にはinterfaceが、C++には純粋仮想関数があり、一応インタフェースのみの継承は可能にはなっています)。 これを避けるために、NVIイディオムやprotected non-virtual デストラクタを使うわけですが、実のところ、継承を使わないほうが(コード量は多くても)、スマートなデザインになることが多々あります。 事実、既存の実装を再利用するだけならばコンポジョン(+pimpl)だけで通常は十分ですので、インタフェースを継承する必要が無ければ(特にpu