基本链接列表数据结构。
class Node {
public:
Node();
Node(int num);
private:
int data_;
Node * next_;
};
class LinkedList {
public:
LinkedList();
void insertAtFront(int toAdd);
void insertAtEnd(int num);
private:
Node * head_;
};
....
void LinkedList::insertAtFront(int toAdd) {
if (head_ == NULL) {
head_ = new Node(toAdd);
}
else {
Node * current = head_;
while (current->next_ != NULL) { //problem in question
}
}
}
这显然是一个粗略的,远非完成的实现,所以不要在语法上判断我。但我对我的IDE向我投掷的明显警告提出了疑问。主要是next_是私有的,所以while循环不起作用。 current-> next是无法访问的。
在我的编程课程的早期,我已经打败了我,所有类变量都应该在几乎所有情况下都是私有/受保护的。现在我可以走明显路线,在Node类本身中添加一个递归函数来处理插入并从head_等调用它。
或者,在这里和我在一起,我可以将next_公开?我真的不明白为什么不。由于main()只能通过私有head_指针间接访问节点,并且节点的实际“数据”是私有的,是否有理由保持next_ private?
答案 0 :(得分:0)
这个建议仍然很好。您不应该公开这些字段。相反,你应该:
(我个人建议将“Node”放在“details”或“internal”命名空间中,将“LinkedList”添加为Node的朋友,并在LinkedList的私有部分创建“typedef details :: Node Node”,除非你打算让其他代码使用Node,在这种情况下你可能还想考虑制作公共访问器函数,这些函数提供对字段的只读访问权限 - 在这种特殊情况下,我仍然会在LinkedList中有一个typedef到“Node” ,在这种情况下,我会将typedef公之于众。)
这些方法中的任何一种都将授予LinkedList,但只授予LinkedList,访问。
要回答有关将其公开的危险性的问题,一些危险包括: