C ++通过指针参数访问私有成员

时间:2018-12-10 03:53:04

标签: c++

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()如何直接访问它们。

1 个答案:

答案 0 :(得分:0)

  

在上面的代码中,insert()Link*作为参数,并使用->直接更改其指向(Link* succ, prev)的位置。但是succprev都是该类的private成员,所以我不知道insert()怎么可能直接访问它们。

在类的成员函数中,可以访问该类的private个成员。由于insert()Link的成员函数,因此您可以访问其中的类privateprev的成员succ。您不仅可以访问隐式对象的prevsucc,即this->prevthis->succ,还可以访问prev和{{1} }该类任何实例的成员。

{{3}表(重点是我):

  

该班级的私​​人成员只能由该班级的成员和朋友访问,无论该成员位于相同还是不同的实例上