2014-01-12 40 views
3

在使用鏈接列表示例impl的堆棧中,爲什麼我們需要在Stack類中創建Element作爲嵌套類?另外,爲什麼我們需要保護它?我在尋找這個設計背後的原因?關於使用鏈接列表的堆棧實現中的嵌套類

class Stack{ 
    public: 
    Stack(); 
    ~Stack(); 
    void push(void *data); 
    void *pop(); 
    protected: 
    class Element{ 
    public: 
    Element(); 
    Element *getNext() const {return next; } 
    void *value() const {return data;} 
    private: 
    Element *next; 
    void *data; 
    }; 
    Element *head; 
}; 
+3

您不必將其創建爲嵌套類,但它*是Stack用戶不需要知道的內部類。事實上,我甚至會把它變成私人的。 –

回答

2

一般規則是任何項目應具有最受限制的可見性。如果Element是頂級課程,任何人都可以參考它。如果是公開的,任何人都可以參考Stack::Element。這是「展示你的私人」 - 揭示僅在全世界內部使用的實施細節。

至於爲什麼它被保護而不是私人,這有點奇怪。 Stack類顯然不是被設計爲子類(例如,它的析構函數不是虛擬的),所以私有幾乎肯定會更合適。