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

时间:2017-11-04 22:01:30

标签: c++ inheritance scope pass-by-reference

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

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

在排序中,这是我想要做的事情:

class A {
protected:
  int x;
};

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

this是编辑的抱怨:

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

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

谢谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

对于类A,变量x受到保护,对于类A,它将像private一样,因此无法访问成员变量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;
        }
};