2014-01-12 2 views
3

아래의 링크 된 예제 예제 impl을 사용하는 스택에서 Element를 Stack 클래스의 중첩 클래스로 만들어야하는 이유는 무엇입니까? 또한 왜 우리는 그것을 보호해야합니까? 나는이 디자인의 배경을 찾고있다.링크 된 목록을 사용하여 스택 구현의 중첩 클래스에 대해

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 클래스는 분명히 서브 클래 싱되도록 설계되지 않았으므로 (예를 들어 소멸자가 가상이 아닙니다) 비공개가 더 적절할 것입니다.

관련 문제