繁体   English   中英

访问指定为private的基类的公共静态成员

[英]Accessing public static members of a base class specified as private

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

将基类指定为私有时,它仅影响非静态成员。 公共静态成员仍可在派生类中访问。

但是,以下代码从前一个引用之后的示例略微调整导致错误C2247:

'base :: y'无法访问,因为'Derived1'使用'private'继承'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::xDerived 不可访问,如果您使用该表示法尝试访问static成员。

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

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

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

改变这个:

Base::y;

对此;

::Base::y;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM