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 的其他示例数据结构。
所以我在 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 的其他示例数据结构。