在使用Linked List示例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;
};
答案 0 :(得分:2)
一般规则是任何项目都应具有最受限制的可见性。如果Element
是顶级课程,任何人都可以参考它。如果是公开的,任何人都可以参考Stack::Element
。这是“显示您的私人” - 揭示仅在内部使用的实施细节。
至于为什么它受到保护而不是私有,这有点奇怪。 Stack
类显然不是设计为子类(例如,它的析构函数不是虚拟的),所以私有几乎肯定会更合适。