为什么 List 类必须包含 Node 结构作为私有成员C++

Why List class has to contain a Node struct as a private member C++

本文关键字:C++ 成员 结构 Node List 包含 为什么      更新时间:2023-10-16

Mark Weiss的数据结构书中链表的实现让我有点困惑。

List 类包含内部的节点结构,如下所示。

...
class List {
private:
struct Node {
...
};
... 
public:
...
private:
int theSize;
Node *head;
Node *tail;
};

我的问题是,在 List 类中拥有一个 Node 结构真的有必要吗?我认为只要 List 类包含指向标题和尾节点的指针就足够了。将 Node 结构作为私有成员有什么优势?

谢谢!

将 Node 结构声明为 List 类中的私有声明的原因是将其保留为实现的私有声明。这将确保实现的特定细节不会泄漏到公共接口中。这是从内部实现详细信息中抽象接口的有效方法,使这些详细信息可以自由更改,而不会影响 List 类公共接口的用户。

我的问题是,在 List 类中拥有一个 Node 结构真的有必要吗?

这不是必需的,但更好。

  1. List::Node可以不同于Set::Node,可以不同于DList::Node,可以不同于Map::Node。在List之外有一个仅用于实现ListNode类是没有意义的。你必须创建ListNodeSetNode等,使它们成为不同的类型。

  2. Node作为嵌套类可确保类的详细信息特定于List

  3. 它不会用类型名称污染全局命名空间,这些类型名称在List的实现之外没有用

  4. 它允许NodeprivateListNode的详细信息不会向List的用户公开,除非List的实现选择这样做。在大多数情况下,它不会暴露。