A(びーいずあえー)という関係なのでis-a関係です。private継承、protected継承はis-a関係ではありません。is-a関係との対比でhas-a関係、またはis-implemented-in-terms-of関係なんて呼ばれたりします。Aの関係では無いため、AのポインタにBを代入することはできません。0;}基底クラスのポインタへの代入を許すのはpublic継承だけです。public継承以外の継承では基底クラスのメンバへは内部からしかアクセスできません。あるクラスをprivate継承していようが、メンバとしてもっていようが、Bというクラスの実装の詳細の為に内部でAの機能を使うという状態は実際のところ変わりません。あるクラスの持つ機能を使いたい場合にはメンバとして持つ継承するという2つの選択肢があります。基本的に継承はコードの複雑性を増すので避けられるなら避けた方が望ましいとされています。できるだけコンポジション(内包)を使って実装する方が良いでしょう。Optimization)が効くケースがあるという点が挙げられます。これはメモリ効率の観点からすると大きなアドバンテージとなります。2つ目は、あなたがライブラリの設計者で、自作するクラスBは、Aというクラスの仮想関数をオーバーライドして何かしたいけど、ユーザーには自分の作ったクラスをAのポインタとして管理させたくない。何を言っているのでしょうか。0;}これで画面には”B-do”と3回表示されます。実用性を感じない例ですが、あるクラスの一部の挙動をオーバーライドでカスタマイズしたい場合は継承するしかありません。このようなケースは本来ならpublic継承でいいのですが、なんらかの理由(基底クラスのデストラクタがvirtualになっていない等)で基底クラスのポインタによる管理を許さない設計にしたい場合は前述のとおり、public継承しないことで実現できます。STLのコンテナは全てデストラクタがvirtualではありません。これらのクラスを拡張した便利コンテナクラスを作成したい場合も絶対にpublic継承してはいけません。いえ、例えばstd::vectorの拡張クラスを作りたい時に、std::vectorをメンバとして持つと、std::vectorの持つメソッドを全て再実装しなければいけないという手間が発生します。上記のようなケースでは継承とusingを組み合わせることで実装がシンプルになります。0;}boost::noncopyableはデータを持たないクラスなのでEBOが効き、さらにデストラクタがvirtualではないので、private継承にうってつけの例と言えます。