我有这个设置:
class A
{
public:
virtual void Function();
}
class B : private A
{
}
class C : public B
{
public:
// I want to expose A::Function() here
}
我试图通过添加:
来做到这一点class C : public B
{
public:
virtual void Function();
}
和
C::Function()
{
A::Function();
}
但是我得到了“无法访问的基础”错误。
是否可以做这样的事情?
答案 0 :(得分:5)
在B
中,您可以将A::Function
的辅助功能更改为protected
:
class B : private A
{
protected:
using A::Function;
};
在C::Function
(以及C
中的其他地方),您必须将该功能称为B::Function
,而不是A::Function
。您也可以public: using B::Function;
C
而不是实现只调用C::Function
的{{1}}。
答案 1 :(得分:3)
你不能这样做。 B
继承自A
的事实是一个实现细节,您不能从C
访问它 - 就像您无法访问B
的私有函数一样或成员变量。
如果B
从A继承protected
或public
,这将完全合法。
答案 2 :(得分:1)
如果您可以将其更改为class B : protected A
,则应该有效。
答案 3 :(得分:0)
不是真的。您正在描述的场景表明您的类层次结构需要重新设计。