Kar*_*lEL 11 c++ oop derived-class static-members
我正在学习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;
}
Run Code Online (Sandbox Code Playgroud)
Bat*_*eba 16
该文档有点误导.
正确的编译器行为是Base::y 和 Base::x对双方在交通不便Derived,如果您使用的符号,以试图达到的static成员.
但是您可以通过使用另一个范围解析运算符通过全局命名空间(从而规避Derived1)来访问它:
int Derived2::ShowCount()
{
int cCount = ::Base::y;
return cCount;
}
Run Code Online (Sandbox Code Playgroud)
最后,如果您希望链接阶段成功,请不要忘记在某处定义 y.