Знакомство с protected (модификатор доступа внутри класса)

Эта статья ограниченно ознакамливает читателя с доступом protected. Поскольку степенью доступа может быть применена и к элементам класса, и к самому классу, мной решено не смешивать и то и это в одну статью, а начать с попроще. Попроще, это, по-моему, управление доступом к внутренним частям класса. Именно об этом доступе здесь и будет расписано.
В классах есть три варианта защитить части класса от внешнего влияния: public, private и protected. Новичков многих почти всегда интересует, что это за доступ такой protected. Если с приватной секцией, например, понятно, что она такое, но как правило поначалу непонятно, где она нужна, то с протектед секцией не понятно, ни что она такое, ни зачем она нужна.
  • Различие между private и protected проявляется только внутри классов, порожденных от базового класса.
В общем, чтобы это понять, нужно как минимум изучить какой-нибудь код. Вот, например, такой:

Предполагаю, что многие читатели сразу сфокусирут своё внимание вовнутрь main, где написано, что это можно, а это нельзя. Внутри main() происходит ровно то же, что всегда происходит при взаимодействии с private частями класса: востребован посредник для полноценной работы. Но protected как раз и отличает то, что оно позволяет избежать посредничества, но с одним но: избежать посредничества можно внутри класса-наследника. Т. е. для того, чтобы не использовать посредника между классом-наследником и классом-родителем используют protected. Внутри B посредников для функции родительского ему A нет.
Для начала хорошо бы понимать, что класс-наследник легко может использовать родительские функции. По этой причине внутри класса-наследника возможно использовать функцию show(), несмотря на то, что она как будто бы не описана. А вот дальшше и начинается основное. Эта функция может быть прописана в одной из трёх секций доступа: или private, или public, или protected.

  • private: — для доступа к show внутри foo() нужен посредник
  • public: — для доступа к show внутри foo() посредник не нужен
  • protected: — для доступа к show внутри foo() посредник не нужен
Суть в том, что использованием protected — внутри потомка доступ открывается, а вне потомка закрывается.
Когда вы проникнитесь этой идеей (а она не так сложна, как кажется поначалу), вам может показаться, что очень удобно это использовать, но не стоит заблуждаться. Желательно избегать protected, предпочитая private.
Статья была полностью переписана 08.04.2018г.

5 комментариев на «“Знакомство с protected (модификатор доступа внутри класса)”»

  1. Alex:

    Опечатка в 14 строке :mrgreen:
    public: //Дулаем доступной извне функцию ниже

  2. Sergio:

    Ссылки перед примером — битые… 😯

  3. Gery:

    «произошел от производного» ->  «произошел от базового»

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Поиск

 
     

Случайная книга в электронном формате

https://www.litres.ru/evgeniy-kornilov-2/programmirovanie-shahmat-i-drugih-logicheskih-igr/?lfrom=15589587
Яндекс.Метрика