如何跳过具有公共访问权限的类?

时间:2011-04-23 19:43:44

标签: c++

我有这个设置:

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();
}

但是我得到了“无法访问的基础”错误。

是否可以做这样的事情?

4 个答案:

答案 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继承protectedpublic,这将完全合法。

答案 2 :(得分:1)

如果您可以将其更改为class B : protected A,则应该有效。

答案 3 :(得分:0)

不是真的。您正在描述的场景表明您的类层次结构需要重新设计。