在派生类中无法访问受保护的成员

时间:2012-04-21 14:30:25

标签: 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; // this says it is not accesible, violation?
    //.....
}

3 个答案:

答案 0 :(得分:9)

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

出现这种情况的原因与以下相同:

class B
{
protected:
   int x;
};

//...

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

答案 1 :(得分:3)

因为受保护的成员只在B类的范围中可见所以你可以在这里访问它,例如:

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

但是表达式如

someInstance.someMember;

要求someMember公开。

一些相关的SO问题herehere

答案 2 :(得分:0)

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

中访问它