微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决孩子如何通过成员方法访问另一个孩子的受保护成员

这是怎么编译的?变量 d 内受保护。子类方法如何工作能够修改子类受保护成员变量的另一个实例?孩子可以通过成员方法访问另一个孩子的受保护成员吗

#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() 方法中的代码能够访问任何 Parent::d 对象的受保护的 Child 成员变量,因为 Child 是 {{ 1}}。

,

因为Child类继承自Parent类,所以Child类继承了int d成员变量。当调用 Child 类的构造函数时,它会创建 int d 成员变量作为 Child 类的成员。 int d 中的 Child 又是一个 protected 成员变量。

然后,如果您调用 Child 类的方法,它自然可以访问它所拥有的类的所有成员。因此,由于 works 方法归 Child 类所有,因此它可以访问 int d 成员变量并允许对其进行更改(如果您不将其设置为 const 方法,例如如void works(Child* some_other_child) const,这意味着该方法不允许更改其类的任何成员变量)。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。