如何访问受"父"保护的成员?
How can I access to a "parent" protected member?
这是我的代码的"模拟":
#include <string>
#include <iostream>
using namespace std;
class A
{
protected:
int test = 10;
};
class C;
class B : public A
{
private:
C *c;
public:
B();
};
class C
{
public:
C(B *b) {
cout << b->test;
}
};
B::B() {
c = new C(this);
}
int main()
{
B();
}
我不能触摸那个test
变量的protected
状态类型,因为它来自另一个框架,我没有真正的"访问权限"。
我需要从B(扩展A)创建一个类C的实例,将B传递给它,并访问(从C)A的参数test
。
有什么奇特的方法吗?在B中,我可以毫无问题地使用测试。。。
C类不是从B继承的,所以B不是父类,所以C类不能访问受保护的成员。
解决方案
如果你控制了B和C,但不允许触摸来自另一个框架的A,你可以尝试:
class B : public A
{
private:
C *c;
public:
B();
friend C; // Make C a friend of B so that it has access.
};
在线演示
建议
尽管有一种技术上的变通方法可以实现您想要的,但这样做可能是不可取的。受保护成员的想法是,它的实现细节只与派生类相关。通过友好地打开它,你会创建一个对实现细节的依赖,而你不应该访问这些细节。所以你会违反框架的设计原则。可能,但风险自负。
另一种方法可以是在B中向受保护元素添加一个公共getter,然后在C中引用这个公共成员(demo)。这更好,但您仍然会公开不应该公开的数据。
您还可以在B:中添加一个公共访问器
class B : public A
{
private:
C *c;
public:
B();
int get_test() const { return this->test; }
};
相关文章:
- C++:无法访问声明的受保护成员
- 相同的层次结构,访问基类的受保护成员时的行为不同
- 同一模板类但模板类型的受保护成员
- 派生类无法访问基类的受保护成员
- 继承期间受保护成员的皮条
- 如何将超类的受保护成员访问到其派生类. 如果已在派生类中声明了具有相同名称的函数?
- 是否可以基于私有/受保护成员分配类枚举?
- 依赖模板基础的受保护成员
- 无法从派生类型的作用域访问另一个实例的受保护成员
- 为什么我无法使用受保护/私有继承访问派生实例中基类的受保护成员?
- 将对象强制转换为派生类以访问父类的受保护成员
- 使从一个基类派生的类能够使用继承的受保护成员
- 派生类如何使用基类的受保护成员
- 访问派生类C++中的受保护成员
- 访问基类的受保护成员
- 如何访问多个继承类中的受保护成员
- 如何从另一个类的基类访问派生类中的受保护成员
- 无法访问派生类中的基本受保护成员!(在虚函数中)
- 如何通过派生类访问基类的受保护成员?
- 如果孩子不需要父母班级的所有受保护成员,这是不好的班级设计吗?