访问指定为私有的基 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::x
到 both 在 [=13 中无法访问=],如果您使用该表示法尝试访问 static
成员。
但是您 可以 通过 全局命名空间 访问它(从而绕过 Derived1
),方法是使用另一个范围解析运算符:
int Derived2::ShowCount()
{
int cCount = ::Base::y;
return cCount;
}
最后,如果您希望link阶段成功,请不要忘记在某处定义y
。
改变这个:
Base::y;
到此;
::Base::y;
我正在学习 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::x
到 both 在 [=13 中无法访问=],如果您使用该表示法尝试访问 static
成员。
但是您 可以 通过 全局命名空间 访问它(从而绕过 Derived1
),方法是使用另一个范围解析运算符:
int Derived2::ShowCount()
{
int cCount = ::Base::y;
return cCount;
}
最后,如果您希望link阶段成功,请不要忘记在某处定义y
。
改变这个:
Base::y;
到此;
::Base::y;