Я новичок в 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 может получить доступ к члену класса А, потому что
Класс Б: публичный А
{public: int x}
==>
Класс б
{public: int w; int x;}
и класс D: защищенный B
{public: int z}
==>
класс D
{public: int z; защищенный: int w, int x;}
Почему я не прав ?? Спасибо!
D
можно увидеть членов A
а также B
, но из-за protected
только наследство D
и классы, полученные из D
знать, что D
это B
и может получить доступ B
а также A
члены. main
не является производным от D
, так main
не знает о D
наследство B
и, следовательно, не может получить доступ к унаследованному A
а также B
члены.
Других решений пока нет …