C++ 受保护的成员在派生类中不可访问

C++ 受保护的成员在派生类中不可访问,c++,inheritance,protected,private-members,C++,Inheritance,Protected,Private Members,为什么基类中的受保护成员在派生类中不可访问 class ClassA { public: int publicmemberA; protected: int protectedmemberA; private: int privatememberA; ClassA(); }; class ClassB : public ClassA { }; int main () { ClassB b; b.protectedmemberA; // t

为什么基类中的受保护成员在派生类中不可访问

class ClassA
{
public:
    int publicmemberA;

protected:
    int protectedmemberA;

private:
    int privatememberA;

    ClassA();
};

class ClassB : public ClassA
{
};

int main ()
{
    ClassB b;
    b.protectedmemberA; // this says it is not accesible, violation?
    //.....
}

您可以访问
protectedmemberA
内部的
b
。您正在尝试从外部访问它。这与继承无关

发生这种情况的原因与以下原因相同:

class B
{
protected:
   int x;
};

//...

B b;
b.x = 0;  //also illegal

因为受保护的成员仅在类别B的范围内可见。因此您可以在此处访问它,例如:

class ClassB : public ClassA
{
    void foo() { std::cout << protectedMember;}
};
要求
someMember
公开


一些相关的SO问题和。

您只能从
B
(或
A
)的范围内访问
protectedmemberA
)-您试图从
main()

tnx>中访问它,有没有首选受保护修饰符的好情况?仍然无法理解它的重要性:(我想不出使用受保护成员变量的好理由。当您希望允许派生类使用某些基类功能而不公开该功能时,我已经看到了受保护函数的用法。我想说,只有在您真正知道自己在做什么的情况下才使用它!
someInstance.someMember;