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の質問。

于 2012-04-21T14:32:11.207 に答える
0

(または)protectedmemberAの範囲内からのみアクセスできます-内からアクセスしようとしていますBAmain()

于 2012-04-21T14:48:35.310 に答える