访问指定为私有的基 class 的 public 静态成员

Accessing public static members of a base class specified as private

我正在学习 C++。文档 docs.microsoft.com/en-us/cpp/cpp/member-access-control-cpp 说:

When you specify a base class as private, it affects only nonstatic members. Public static members are still accessible in the derived classes.

但是,以下代码根据前面引用导致错误 C2247 的示例稍作调整:

'Base::y' not accessible because 'Derived1' uses 'private' to inherit from 'Base'.

对于这种情况,我将不胜感激。

class Base
{
public:
    int x;             
    static int y;      
};

class Derived1 : private Base
{
};

class Derived2 : public Derived1
{
public:
    int ShowCount();    
};

int Derived2::ShowCount()
{
    int cCount = Base::y;       
    return cCount;
}

该文档有点误导。

正确的编译器行为是 Base::y Base::xboth 在 [=13 中无法访问=],如果您使用该表示法尝试访问 static 成员。

但是您 可以 通过 全局命名空间 访问它(从而绕过 Derived1),方法是使用另一个范围解析运算符:

int Derived2::ShowCount()
{
    int cCount = ::Base::y;       
    return cCount;
}

最后,如果您希望link阶段成功,请不要忘记在某处定义y

改变这个:

Base::y;

到此;

::Base::y;