我有一个关于从私有继承基类的类继承的简单问题,即我们有
class Base {};
class Heir: private Base {};
class HeirsHeir : public Heir {};
了解HeirsHeir
无法访问 '其' 的任何内容Base
。特别是,它不能有一个方法返回Base &
对自身的引用。但是为什么它不能返回对另一个Base 对象的引用呢?那么为什么以下代码无法编译:
class Base {};
class Kid : private Base {};
Base instance;
class Grandkid : public Kid
{
const Base &GetInstance () const
{ return instance; }
};
至少我的编译器(MinGW 5.3,即 Windows 的 gcc)给出了
error 'class Base Base::Base' is inaccessible at {};
error: within this context const Base &getInstance () const
据我了解,这没有意义,因为此时我没有调用 Base 的构造函数,而是返回一个引用(对 Base 实例)。
请注意,可以通过使用来修复错误
const ::Base &GetInstance () const
{ return instance; }
这肯定与 C++03 §11.2/3 相关联(参见 [ C++ 私有继承和静态成员/类型)
注意:私有基类的成员可能无法作为继承的成员名称访问,但可以直接访问。
但我不明白为什么这是必要的。有人可以解释一下吗?