C++ 如何跳过具有函数公共访问权限的类?

C++ 如何跳过具有函数公共访问权限的类?,c++,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(); } 及 但我得到了“无法访问的基础”错

我有以下设置:

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

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


可以这样做吗?

如果您可以将其更改为
B类:受保护的A
,它应该可以工作。

如果您可以将其更改为
B类:受保护的A
,它应该可以工作。

您不能这样做。
B
继承自
A
这一事实是一个实现细节,您不能从
C
访问它,就像您不能访问
B
的私有函数或成员变量一样


如果
B
从A继承
受保护的
公共的
,这将是完全合法的。

您不能这样做。
B
继承自
A
这一事实是一个实现细节,您不能从
C
访问它,就像您不能访问
B
的私有函数或成员变量一样


如果
B
继承了
受保护的
公共的
,那么这将是完全合法的。

事实并非如此。您所描述的场景将表明您的类层次结构需要重新构建。

实际上并非如此。您正在描述的场景将表明您的类层次结构需要重新构建。

B
中,您可以将
A::Function
的可访问性更改为
protected

class B : private A
{
protected:
    using A::Function;
};

C::Function
(以及
C
中的其他地方)中,您必须将函数称为
B::Function
,而不是
A::Function
。您还可以
public:使用B::FunctionC
中,您可以将
a::Function
的可访问性更改为
protected
,而不是实现只调用
B::Function
C::Function

class B : private A
{
protected:
    using A::Function;
};
C::Function
(以及
C
中的其他地方)中,您必须将函数称为
B::Function
,而不是
A::Function
。您还可以
public:使用B::Function
C
中,而不是实现一个只调用
B::Function
C::Function