关于使用Linked List的堆栈实现中的嵌套类

时间:2014-01-12 05:45:18

标签: c++ data-structures

在使用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;
 };

1 个答案:

答案 0 :(得分:2)

一般规则是任何项目都应具有最受限制的可见性。如果Element是顶级课程,任何人都可以参考它。如果是公开的,任何人都可以参考Stack::Element。这是“显示您的私人” - 揭示仅在内部使用的实施细节。

至于为什么它受到保护而不是私有,这有点奇怪。 Stack类显然不是设计为子类(例如,它的析构函数不是虚拟的),所以私有几乎肯定会更合适。