为什么基类中的受保护成员在派生类中无法访问?
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?
//.....
}
答案 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
公开。
答案 2 :(得分:0)
您只能在protectedmemberA
(或B
)范围内访问A
- 您正试图从main()