6

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

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?
    //.....
}
4

3 回答 3

11

可以进入protectedmemberA 里面 b。您正试图从外部访问它。它与继承无关。

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

class B
{
protected:
   int x;
};

//...

B b;
b.x = 0;  //also illegal
于 2012-04-21T14:32:07.603 回答
3

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

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

但是一个表达式,例如

someInstance.someMember;

需要someMember公开。

一些相关的 SO 问题herehere

于 2012-04-21T14:32:11.207 回答
0

您只能从(or )protectedmemberA范围内访问- 您正在尝试从范围内访问它BAmain()

于 2012-04-21T14:48:35.310 回答