先給結論:函數
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