[英]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.