private 繼承

我覺得私有繼承在設計模式中也有作用。

私有繼承的子類一般不希望被其它的類所繼承。有一種設計原則: 能夠被繼承的類都應該是虛類;能夠實例化的類都不應該被繼承。而私有類恰恰能夠很好的實現該原則。

轉一個帖子:
http://www.4ucode.com/Study/Topic/977313
正文
 

       昨晚閱讀Gof的設計模式時,提到Adapter(適配器)有兩種,分別爲類適配器和對象適配器。其中表明類適配器採用多重繼承適配接口。類適配器的關鍵是用一個分支繼承接口,而用另外一個分支繼承接口的實現部分。C++中作出這一個區分的方法是:用公共方式繼承接口;用私有方式繼承接口實現。就藉此機會複習一下C++中的私有繼承吧!

     通過在基類表中去掉public或者顯示的聲明private,可以私有的繼承基類。當私有繼承時,創建的新類有基類的所有數據和功能,但是這些功能是隱藏的所以它只是內部實現部分。該類的對象訪問不到這些內部功能,並且一個對象不被看作這個基類的成員。當私有繼承時,基類的所有public成員都變成了private。如果希望它們中的任何一個是可視的,只有用派生類的public選項申明它們的名字即可。

    class base1
   {
     public:
       char f() const { return 'a';} //內聯函數,const成員函數
       int g() const  {return 2;}
       float h() const {return 3.0;}
   };

  class derived : private base1
  {
    public:
      base1::f; //將私有繼承成員公有化
  };

  int main(void)
  {
    derived d;
    d.f();    //可以調用,因爲被該私有成員被公有化了
    //d.h();  //不能調用,因爲是私有函數,不能通過對象來調用
   
    return 0;
 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章