尝试从继承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.
我的代码有什么问题,我该怎么做才能纠正它?
谢谢。
答案 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;
}
};