繁体   English   中英

从公共派生类访问受保护的成员

[英]Access protected members from a public derived class

尝试从继承了public的派生类的方法访问基类的受保护成员时遇到错误。

我通过将基类的两个对象传递给派生类的方法,并尝试访问对象的受保护成员。 但是,编辑抱怨。

在某种程度上,这是我正在尝试做的事情:

class A {
protected:
  int x;
};

class B:public A
{
public:
  void test(A &obj1, A &obj2)
  {
    obj1.x = 1;
    obj2.x = 2;
  }
};

是编辑的抱怨:

 int A::x
 protected member A::x (declared at line 5) is not accessible though "A" pointer or object.

我的代码有什么问题,我该怎么做才能纠正它?

谢谢。

您只能访问与派生对象具有相同类型的类的受基类保护的成员。 您将必须使用公共方法来获取成员或其他解决方法。 想象一下,您还有另一个类C,它继承了A作为私有类。 您可以将C作为A引用传递给B方法,但无法访问基类成员。 如果引用传递到B方法引用的B方法,那么您将能够访问其中的受保护成员。

对于类A,变量x受保护,其作用类似于类A的私有,因此成员变量A :: X是不可访问的。

但是,如果您更改方法

void test(A &obj1, A &obj2)

void test(B &obj1, B &obj2)

然后,您可以从类B访问变量x,因为继承是公共的,因此它在受到保护的情况下可用。

因此,对于访问类B中的x,可以像下面这样编写整个代码:

class A {
    protected:
        int x;
};

class B:public A
{
    public:
        void test(B &obj1, B &obj2)
        {
            obj1.x = 1;
            obj2.x = 2;
        }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM