child 如何通过成员方法访问另一个 child 的受保护成员

How is the child access another child's protected member via member method

这是如何编译的?受保护的变量 d。 child class 方法 works 如何修改 child class 受保护成员变量的另一个实例? child 能否通过成员方法

访问另一个 child 的受保护成员
#include <iostream>

using namespace std;

class Parent
{
public:
    void print()
    {
        cout << d;
    }
protected:
    int d = 2;
};

class Child : public Parent
{

public:
    void works(Child* some_other_child)
    {
        some_other_child->d = 3;
    }
};

int main()
{
    Parent *p = new Parent();
    Child *c = new Child();
    Child *co = new Child();
    c->works(co);
    co->print();
    return 0;
}

protectedprivate 关键字限制哪些 可以访问成员变量,而不是哪些 对象 可以访问它。

因此,Child::works() 方法中的代码能够访问任何 Child 对象的受保护 Parent::d 成员变量,因为 ChildParent.

因为Childclass继承自Parentclass,Childclass继承int d成员变量。 Childclass的构造函数被调用时,会创建int d成员变量作为Childclass的成员。 Child中的int d又是一个protected成员变量。

然后,如果您调用 Child class 的方法,它自然可以访问它所拥有的 class 的所有成员。因此,由于 works 方法属于 Child class,它可以访问 int d 成员变量并允许更改它(如果您不将其设为const方法,如void works(Child* some_other_child) const,表示该方法不允许改变其class)的任何成员变量。

当您将指针(或引用)传递给 Child 的另一个对象时,因为它是从 Child 的方法中调用的,所以它也可以更改成员,因为它可以访问Child的成员变量。