2012-04-21 125 views
4

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

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

回答

9

您可以访问protectedmemberAb。您正试图从外部访问它。它与继承无关。

会出现这种情况同样的原因如下:

class B 
{ 
protected: 
    int x; 
}; 

//... 

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

因为保护成员才可见B级的范围内所以您可以访问这里例如:

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

但表达如

someInstance.someMember; 

要求someMember公开。

一些相关的SO问题herehere

+0

TNX胡安内访问它,在其上首选protected修饰符任何良好局面?仍然不能得到它的意义:( – WantIt 2012-04-21 14:45:59

+0

我想不出一个很好的理由来使用受保护的成员变量。当你想允许派生类使用某些基类功能而不公开该功能时,我已经看到使用受保护的函数。我会说,只有在你真的知道你在做什么的时候才使用它! – juanchopanza 2012-04-21 14:51:15

0

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