有人可以解释为什么这段代码不起作用.
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; }
};
Run Code Online (Sandbox Code Playgroud)
怎么可能C无法访问B?
如果我转换parent为a C*而不是B*它工作正常.但我不希望用户承担任何不必要的风险.是否有更清洁的方式访问a?
谢谢.
从C类的对象中,您可以访问受保护的成员B,但前提是它们是某个类对象的一部分C(可能是您的,也许不是).换句话说,a要从中进行访问C,您需要一个指针(或引用)C.这就是protected修饰符的含义.
原因如下.该((B*)parent)指针可以指向一些其他子类B,从完全不同的C,并且该子类可具有a构件不可访问.
| 归档时间: |
|
| 查看次数: |
2436 次 |
| 最近记录: |