私有繼承的一些做用

先給結論:函數

1.private繼承就是一種純粹的實現技術 : 意味着老子繼承你,純粹是看中了你裏面的某些函數實現罷了,不想跟你有別的關係;
    
    2.通常來講私有繼承,與複合類的做用相似,能夠互換(複合類更容易理解)
    
    3.這個新的類將不會與父類指針有關係(接口都變private了)

與public繼承的區別是 父類的全部接口都不可用了(變爲private) ,換句話說:指針

class B{};
class D : private B{}; //private

D d;
B *pb =  &d; //這裏將編譯出錯; 既然父類的全部接口都是private了. 那麼 pb 又有什麼意義呢?

經過上面可知與public繼承的區別了; 那private繼承用來幹嗎??code

好比有這麼一個時間類 , 另外一個widget也想有超時的功能:繼承

class Timer{
public:
    virtual void timeout(){ cout << __FUNCTION__ << endl;} //用於計算超時功能
};

class Widget: private Timer{   //private 繼承
private:                      //這裏也改private 或許比較好,若是是public接口,有可能不太好哦.客戶誤意味widget竟然有超時!
    virtual void timeout() {   
        Timer::timeout();     //調用父類的超時功能
        cout << __FUNCTION__ << endl; //幹本身的事
    }
};

像相似這種狀況下就可使用 private 繼承 ;
若是改爲public 繼承或許有些奇怪, 好比: Timer *pt = new Widget ??? 好像二者沒啥關係呢.接口

最後: private繼承意味着,俺只想獲取某些函數實現;get

相關文章
相關標籤/搜索