[英]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::x
在Derived
都不可访问,如果您使用该表示法尝试访问static
成员。
但是您可以通过使用另一个范围解析运算符通过全局命名空间 (从而规避Derived1
) 来访问它:
int Derived2::ShowCount()
{
int cCount = ::Base::y;
return cCount;
}
最后,如果您希望链接阶段成功,请不要忘记在某处定义 y
。
改变这个:
Base::y;
对此;
::Base::y;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.