谁能解释为什么这段代码不起作用。
class A
{
public:
A(void){}
virtual ~A(void){}
protected:
A* parent;
};
class B : public A
{
public:
B(void){parent = new B;}
~B(void){delete parent;}
protected:
int a;
};
class C : public B
{
public:
C(void){}
virtual ~C(void){}
void f(void){ ((B*)parent)->a; }
};
C
怎么可能无法访问 B
的成员?
如果我将 parent
转换为 C*
而不是 B*
它工作正常。但我不希望用户承担任何不必要的风险。是否有更简洁的方式访问 a
?
谢谢。
最佳答案
从 C
类的对象中,您可以访问 B
的 protected 成员,但前提是它们是类 C< 的某个对象的一部分
(也许是你的,也许不是)。换句话说,要从 C
访问 a
,您需要一个指向 C
的指针(或引用)。这就是 protected
修饰符的意思。
原因如下。 ((B*)parent)
指针可能指向 B
的其他子类,完全不同于 C
,并且该子类可能具有一个
成员不可访问。
关于c++ - 使用指向基类的指针访问 protected 继承成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15969658/