有人可以解释为什么这段代码不起作用。
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
to a C*
代替B*
效果很好。但我不希望用户承担任何不必要的风险。有没有更干净的方式访问a
?
Thanks.
从一个对象C
类,您可以访问受保护的成员B
,但前提是它们是某个类对象的一部分C
(也许是你的,也许不是)。换句话说,要访问a
from C
,您需要一个指针(或引用)C
。这就是protected
修饰符的意思。
其理由如下。这((B*)parent)
指针可能指向某个其他子类B
,完全不同于C
,并且该子类可能具有a
会员无法访问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)