private繼承定義:private繼承而來的所有成員,在derived中都會變成private屬性。
應用場合:當一個意欲成為derived class 者想訪問一個意欲成為base class 者的protected成分,
或為了重新定義一或多個virtual 函數時可以用private繼承。
知識點:
private繼承意味只有實現部分被繼承,接口部分應略去。
如果classes之間的繼承關系是private,編譯器不會自動將一個derived class對象轉換為一個base class對象,
這樣的轉換會導致錯誤。請記住,private繼承純粹只是一種實現技術。
盡量用復合代替private繼承。因為復合可避免virtual函數重定義。
事例:
class Widget : public Timer
{
private:
virtual void onTick() const; //查看Widget的數據等等。
};
//復合實現
class Widget
{
private:
class WidgetTimer : : public Timer
{
public:
virtual void onTick() const; //查看Widget的數據等等。
};
WidgetTimer timer;
};