2012-01-25 9 views
3

継承がカプセル化を中断することを私は読んでいます(Scott Myers)。データ/内部メソッドがプライベート(保護されていない)の場合、カプセル化は壊れていますか?継承はC++でカプセル化を中断します

class Vehicle 
{ 
    int color; 

public: 
    void set_color(); 
    int get_color(); 
} 


class Car: public Vehicle 
{ 
public: 
    void change_tires(); 
} 

私は車を壊さずに車の内部を変えることができます。

答えて

2

"継承がカプセル化を破る"のようなフレーズは、しばしばコンテキストから取り除かれます。

句の意味は、継承される仮想インターフェイスがカプセル化されていないということです。事実上、継承とは、隠された特定のものが現在公開されていることを意味します。 protectedメンバーとvirtualprivateメンバーのすべては、派生クラスで公開されています。

virtualprivateメンバーはまだ表示されていません。

+0

**バーチャルプライベートメンバー** **について詳しく説明できますか?*はすべて派生クラス*によって公開されていますか? –

0

Scott Myersの言ったことは分かりませんが、とにかく指定した方法で車のメソッドはVehicleパブリックメソッドとプロパティにアクセスできます。ビークルを作成した場合と同じ方法ですオブジェクト(保護されたメソッドとプロパティはありません)。したがって、基底クラスが正しくカプセル化されていない場合に限り、ここでカプセル化が破られることはありません。 int colorはプライベートなので(クラスプロパティと関数は指定されていなければprivateです)、set_color(...)メソッドを使ってカーの色を変更することができます。

関連する問題