c++数据结构与算法中的双向链表

Double linked list in Data Structures and Algorithms in c++

所以我在 C 和 C++ 中的数据结构和算法中看到了这个代码片段:

class DLinkedList { // doubly linked list
public:
    DLinkedList(); // constructor
    ~DLinkedList(); // destructor
    bool empty() const; // is list empty?
    const Elem& front() const; // get front element
    const Elem& back() const; // get back element
    void addFront(const Elem& e); // add to front of list
    void addBack(const Elem& e); // add to back of list
    void removeFront(); // remove from front
    void removeBack(); // remove from back
private: // local type definitions
    DNode* header; // list sentinels
    DNode* trailer;
protected: // local utilities
    void add(DNode* v, const Elem& e); // insert new node before v
    void remove(DNode* v); // remove node v
};

而我的问题是:为什么成员函数 add()remove() protected(以及我何时应该使用关键字 protected

编辑:DNode 在此处定义:

typedef string Elem; // list element type
class DNode { // doubly linked list node
private:
    Elem elem; // node element value
    DNode* prev; // previous node in list
    DNode* next; // next node in list
    friend class DLinkedList; // allow DLinkedList access
};

SO protected 意味着它只能由派生的 classes(classes 在这种情况下继承自 class Dlinkedlist)或这个 [=12= 的朋友使用](请参阅声明 class 的朋友)。但是,很难说出作者声明它们受保护的意思

当您希望API查看某些方法但确实想要访问来自 class 及其子 classes(包外或包内)的方法和来自同一包

的 classes

保护 add() 和 remove() 的原因是提供数据抽象并防止未经授权的人员使用这些函数

Protected 仅当此 class 用作继承的基础 class 时才有意义。受保护的方法只能从 class 或派生的 classes.

中的方法访问

我希望您会发现作者继续定义了派生自 DLinkedList 的其他示例数据结构。