在派生类中无法访问受保护的成员
Posted
技术标签:
【中文标题】在派生类中无法访问受保护的成员【英文标题】:protected members are not accessible in derived classes 【发布时间】:2012-05-02 20:09:58 【问题描述】:为什么基类中的受保护成员在派生类中无法访问?
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?
//.....
【问题讨论】:
【参考方案1】:因为受保护的成员仅在 B 类的范围内可见。因此您可以在此处访问它,例如:
class ClassB : public ClassA
void foo() std::cout << protectedMember;
;
但是一个表达式,例如
someInstance.someMember;
要求someMember
公开。
一些相关的SO问题here和here。
【讨论】:
tnx juan,有什么好的情况下首选受保护的修饰符?仍然无法理解它的意义:( 我想不出使用受保护成员变量的充分理由。当您希望允许派生类使用某些基类功能而不公开该功能时,我已经看到了受保护函数的使用。我想说,只有当你真的知道自己在做什么时才使用它!【参考方案2】:您只能在B
(或A
)范围内访问protectedmemberA
- 您正试图从main()
范围内访问它
【讨论】:
【参考方案3】:您可以访问protectedmemberA
内部 b
。您正试图从外部访问它。它与继承无关。
发生这种情况的原因与以下相同:
class B
protected:
int x;
;
//...
B b;
b.x = 0; //also illegal
【讨论】:
以上是关于在派生类中无法访问受保护的成员的主要内容,如果未能解决你的问题,请参考以下文章