【发布时间】:2018-12-10 03:53:03
【问题描述】:
class Link
{
private:
string value;
Link* succ;
Link* prev;
public:
Link(string v, Link* s = nullptr, Link* p = nullptr)
: value(v), succ(s), prev(p) { }
Link* insert(Link* p)
{
if(p == nullptr) return this;
p->succ = this;
if(this->prev) this->prev->succ = p->prev;
p->prev = this->prev;
this->prev = p;
return p;
}
};
int main()
{
Link* language = new Link{Link("C++", nullptr, nullptr)};
language = language->insert(new Link("Python", language, nullptr));
return 0;
}
在这本书,编程原理和实践中,有一章你实现了列表的一部分,这里是代码。
在上面的代码中,insert() 将 Link* 作为参数并使用 -> 直接改变它指向的内容(Link* succ, prev)。但是 succ 和 prev 都是该类的私有成员,所以我不明白 insert() 如何直接访问它们。
【问题讨论】:
-
回答这个问题——根据你的推理,如果
prev和succ是private,它们将/可能会如何改变?一个类可以改变它的内部结构。 -
访问限制适用于类,不适用于对象。类中的任何方法都可以访问类中任何对象的任何字段。访问受限的是类之外的代码。
-
你永远是你自己(和你的克隆人)的朋友。 stackoverflow.com/a/437507/14065
-
半相关说明:
private和protected只会让访问错误变得更加困难。他们无法阻止故意规避访问限制的尝试,并且不会让事情搞砸。
标签: c++