C++ для начинающих private, public, protected

Написание статьи о protected привело к написанию этой. Расписывая тот материал, я понял их основную разницу и понял для какого из случаев предназначены модификаторы доступа private, public и protected.

  • private Модификатор доступа, обозначает, что программист будет использовать соответствующие элементы только внутри своего собственного класса
  • public — Модификатор доступа, который обозначает, что программист будет использовать соответствующие элементы либо в других частях программы, либо в других классах.
  • protected — Модификатор доступа, который определяет, что программист собирается применить наследование. В наследуемых классах он собирается унаследовать такие элементы, которые должны срабатывать как элементы private, но в отличии от private они расплодятся по всем наследникам и каждый такой элемент будет соответствовать только своему классу

   Сейчас я попробую описать тоже самое используя художественный стиль (может кому пригодится)

   Класс-наследник имеет поля и функции-члены базового класса, но не имеет права обращаться к собственным (private) полям и функциям базового класса

   Вот и выходит так, что у основного класса есть такая часть, которую от сердца ему не оторвать, все наследники о ней знают, но использовать это не могут, так как Родитель отказался передавать эту часть по наследству. Такая часть — это private

   Да вот мучает совесть родителя, не может он оставить детей без наследства, решает передать часть того, что у него есть всем своим потомкам. Передается эта тайна о родителя к потомку, но скрыта она от всех посторонних и доступна исключительно и только детям своим . Такая часть — это protected

   А чтобы не вспоминали родителя словом плохим, он передает еще часть наследства своим потомкам и эта часть наследства озвучивается публично. Так как передали ее публично, то эта часть может попасть не в руки потомков и использовать эту часть наследования может любой шарлатан. Такая часть — public

   Иногда задают вопрос: Если мы наследуем класс, наследуются ли приватные поля (члены)
   Внимательный читатель видел, что написано:Класс-наследник имеет поля и функции-члены базового класса
Значит и поле private передается наследнику, но доступа к этому полю внутри класса нету. Выступает такой элемент в качестве виртуального паразита. Ведь для него внутри объекта выделяется память, в которой он зависает и тащится от безделья.
   Ответ — Да, но использовать элементы внутри наследника из этих полей нельзя

   Вообще много людей говорит и пишет, что приватные поля не наследуются. Не слушайте их. Они категорически неправы. Очень легко показать, что единственный и верный ответ тот, который я уже написал. Демонстрирую кодом

Код C++ private поля наследуются

   Теперь смотрим на код. С одной стороны классы B и C ничего не содержат. Если в класс B ничего не унаследовалось, то B = C = пустой класс. Следовательно размеры объектов от этих классов должны быть равны друг другу. И надо же такому случится, в классе A нет ничего кроме приватных элементов. Вот тут-то и возникает момент истинны.
(obj_A=obj_B или obj_B=obj_C?)

   При выводе на экран размеров объектов прекрасно видно, что первые два объекта равны и размер их заметно больше размера третьего объекта. Догадались почему? Потому что эти приватные элементы паразитируют не только виртуально, но и пудрят мозги бедным студентам. Существует только один правильный ответ про наследование приватных элементов по заданному вопросу. Этот ответ — Да, наследуются, висят в памяти, кроме пожирания памяти не делают ничего и использовать их нельзя. Одним словом — Паразиты

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

4 комментария: C++ для начинающих private, public, protected

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

Ваш e-mail не будет опубликован.

Поиск

 
     

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

https://www.litres.ru/roman-suzi/python/?lfrom=15589587
Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Пришёл парень на собеседование. Дали ему тест на админа. Он его успешно прошёл и спросил: - А вы всем курьерам такие тесты даёте?

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок