从公共派生类访问受保护的成员
Access protected members from a public derived class
尝试从继承公共的派生类的方法访问基类的受保护成员时出现错误。
我通过引用将基类的两个对象传递给派生类的方法,并尝试访问对象的受保护成员。然而,编辑抱怨道。
从某种意义上说,这就是我要做的:
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;
}
};
相关文章:
- C++:无法访问声明的受保护成员
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 同一模板类但模板类型的受保护成员
- 派生类无法访问基类的受保护成员
- 继承期间受保护成员的皮条
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 是否可以基于私有/受保护成员分配类枚举?
- 依赖模板基础的受保护成员
- 无法从派生类型的作用域访问另一个实例的受保护成员
- 为什么我无法使用受保护/私有继承访问派生实例中基类的受保护成员?
- 将对象强制转换为派生类以访问父类的受保护成员
- 使从一个基类派生的类能够使用继承的受保护成员
- 派生类如何使用基类的受保护成员
- 访问派生类C++中的受保护成员
- 访问基类的受保护成员
- 如何访问多个继承类中的受保护成员
- 如何从另一个类的基类访问派生类中的受保护成员
- 无法访问派生类中的基本受保护成员!(在虚函数中)
- 如何通过派生类访问基类的受保护成员?
- 如果孩子不需要父母班级的所有受保护成员,这是不好的班级设计吗?