【发布时间】:2013-04-12 13:15:02
【问题描述】:
我知道这段代码行不通,我也知道原因,但是有替代方法吗?
class A
{
public:
A(void){}
virtual ~A(void){}
protected:
A* parent;
int a;
};
class B : public virtual A
{
public:
B(void){}
virtual ~B(void){}
protected:
void f(){ ((B*)parent)->a; }
};
不可能将parent 转换为B*,因为A 是一个虚拟基类。不投射 parent 也会产生错误。我希望我不必将所有成员都公开。有人知道如何访问 A::a 吗?
编辑
使用好友不起作用,因为派生自 B 的类无权访问 A::a。
【问题讨论】:
-
如果没有强制转换,它可能会失败,因为您试图访问 B 中 A 的受保护字段。您只需添加一个公共 getter 并将强制转换删除到 B*。
标签: c++ inheritance