【发布时间】:2013-04-12 11:01:38
【问题描述】:
谁能解释为什么这段代码不起作用。
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实例时崩溃,因为默认构造函数创建另一个实例作为父实例,然后创建另一个实例,然后创建... -
@Axel:这当然只是真实代码的简化版本。但我更新了问题以避免混淆。
标签: c++