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

protected members are not accessible in derived classes

本文关键字:访问 派生 成员 受保护      更新时间:2023-10-16

为什么基类中的受保护成员在派生类中无法访问?

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?
    //.....
}
您可以在

b访问protectedmemberA。您正在尝试从外部访问它。它与继承无关。

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

class B
{
protected:
   int x;
};
//...
B b;
b.x = 0;  //also illegal

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

class ClassB : public ClassA
{
    void foo() { std::cout << protectedMember;}
};

但表达式如

someInstance.someMember;

要求someMember是公开的。

这里和这里一些相关的SO问题。

您只能从B(或A)范围内访问protectedmemberA - 您正在尝试从main()