【问题标题】:Accessing Linked List private variable from outside class从外部类访问链表私有变量
【发布时间】:2015-03-05 16:55:55
【问题描述】:

我目前正在开发一个程序,该程序将访问另一个人编写的链表。我假设这个人将头和尾变量声明为私有,但我想遍历他们的链表。

这是一个可能的链表实现

/* singly linked list node */
struct SLLNode {
    int data;
    SLLNode *next;
};

/* singly linked list implementation */
class SLinkedList {
public:
    SLinkedList();
    ~SLinkedList();

    void addToTail(int newData);
    void addToHead(int newData);

    friend std::ostream& operator<<(std::ostream&, const SLinkedList&);

private:
    SLLNode *head;
    SLLNode *tail;
};

我想访问指向头部的指针,以便能够遍历链表。

如何在无法更改节点的情况下访问该指针?不能仅仅为了安全而改变。提前致谢!

【问题讨论】:

  • 我不认为你应该在 SLinkedList 之外公开这个实现细节。而是提供一种迭代列表的方法,以便其他类可以访问元素,但不能访问 SLinkedList 的内部实现。

标签: c++ class linked-list private-members


【解决方案1】:

你不能,因为它是私人的。

其他人需要向您提供访问权限,例如使用公共成员函数。

举个例子,你可以看看this的问题。

【讨论】:

  • 那么我想我的另一个问题是我可以写什么公共成员,它将返回一个指针,其中数据不能更改。
  • 但是这门课不是你的,你可以这样做吗?这取决于你想要什么。例如,您不能返回指针的 const 引用。 Bur 可能是另一个问题。
  • 你是对的。我现在只是用它来测试,但我现在明白了很多,谢谢。
  • 欢迎您@贾斯汀。请记住,private 的存在是为了确保类外的任何人都无法直接访问私有字段。
  • 我还附上了一个链接。顺便说一句,好问题,+1。 @贾斯汀
【解决方案2】:

设计此列表的人必须提供一个接口,您可以访问存储在列表中的数据。

现在只能将数据添加到列表中并全部输出。

通常此类容器提供允许遍历列表的迭代器。 该人应该编写这样的接口。否则列表没有任何用处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多