我无法理解此访问修饰符

时间:2018-12-12 23:45:14

标签: c++ access-modifiers

我是C ++的初学者。我今天有编程测试。但是我不明白这个例子。

class A
{
public:
    int w;
};

class B : public A
{
public:
    int x;
};

class C : private A
{
public: int y;
};

class D : protected B
{
public: int z;
};

int main()
{
    D d;
    d.w = 10; // compile error
}

我认为(D d; d.w = 10)是正确的,但是它有编译错误。

D由B(受保护)派生,B由A(公共)派生。 因此,我认为D可以访问A类成员,因为

B类:公共A {public:int x} ==> B级 {public:int w; int x;}

和D类:受保护的B {public:int z} ==> D级 {public:int z;保护:int w,int x;}

为什么我错了?谢谢!

1 个答案:

答案 0 :(得分:3)

D可以看到AB的成员,但是由于protected的继承,只有D和派生自D的类知道DB,并且可以访问BA成员。 main不是从D派生的,因此main不知道DB的继承,因此无法访问继承的AB个成员。