Я не могу понять этот модификатор доступа - PullRequest
0 голосов
/ 13 декабря 2018

Я новичок в 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; dw = 10) правильно, но он имеет ошибку компиляции.

D, полученный из B (защищенный), и B, полученный из A (открытый).Итак, я думаю, что D может получить доступ к члену класса A, потому что

Класс B: public A {public: int x} ==> Class B {public: int w;int x;}

и класс D: защищенный B {public: int z} ==> class D {public: int z;защищено: int w, int x;}

Почему я ошибаюсь ??Спасибо!

1 Ответ

0 голосов
/ 13 декабря 2018

D может видеть члены A и B, но из-за наследования protected только D и классы, полученные из D, знают, что D является B и могут получить доступB и A членов.main не является производным от D, поэтому main не знает о наследовании D B и, следовательно, не может получить доступ к унаследованным A и B членам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...