|
1358 / 856 / 366
Регистрация: 26.02.2015
Сообщений: 3,814
|
|||
Пишем свой класс, спецификатор доступа protected09.07.2015, 18:43. Показов 6215. Ответов 61
Метки нет (Все метки)
Всем привет!
Из книги Р. Лафоре относительно спецификатора доступа protected:
0
|
|||
| 09.07.2015, 18:43 | |
|
Ответы с готовыми решениями:
61
Ошибка доступа access violation: почему класс-наследник не видит protected данные-члены класса-родителя? Пишем свой чекер Пишем свой OPC-server |
|
|
||||||
| 09.07.2015, 18:51 | ||||||
|
В хороших классах предоставляется доступ к private, через методы get и set.
Добавлено через 2 минуты т.е
А protected чаще всего лепят в абстрактных классах или в классах, которые могут быть расширены. Как правило, при проектировании понятно, какие классы будут расширятся, а какие нет.
0
|
||||||
|
|
|||
| 09.07.2015, 19:25 | |||
|
Члены класса делают private как правило. Если же вы видите класс в котором члены класса открыты то этот класс либо какой-то особенный(например не предназначенный для наследования) либо он просто так криво написан. Добавлено через 5 минут
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 09.07.2015, 20:48 | |||
|
который должен быть доступен наследникам класса. зачем вообще нужен этот базовый класс?
0
|
|||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 09.07.2015, 20:59 | ||
|
1
|
||
|
25 / 25 / 11
Регистрация: 07.12.2012
Сообщений: 169
|
|
| 09.07.2015, 21:03 | |
|
Avazart, Чем плох вариант использовать данные с областью видимости protected и переопределять область видимости на private (используя using) в наследуемом классе?
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 09.07.2015, 21:05 | ||
|
и следовательно, код обладает всеми недостатками такого рода проектирования.
1
|
||
|
25 / 25 / 11
Регистрация: 07.12.2012
Сообщений: 169
|
||||||
| 09.07.2015, 21:14 | ||||||
|
Avazart, да хоть
hoggy, ну а если это абстрактный класс, и цели делать его интерфейсом (Pure Abstract Class) нет?
0
|
||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 09.07.2015, 21:16 | ||
|
вы понимаете вообще, откуда пошла такая манера делать все данные-члены классов приватными? во многих книгах пишут: по хорошему все данные-члены класса должны быть приватными. вот зачем это нужно?
0
|
||
|
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
|
||
| 09.07.2015, 21:17 | ||
|
Ну и согласно принципу инкапсуляции класс должен сам управлять своими данными, а тут ими будет управлять еще кто-то, т.е. инкапсуляция нарушается. В общем, все это сильно противоречит принципам ООП.
2
|
||
|
|
||
| 09.07.2015, 21:20 | ||
|
Одинаковый "внешний" вид/интерфейс, но возможно разное поведение (от класса к классу) _x и вообще член класса в данном случае дает возможность варьировать поведением? Ведь нет виртуальных членов данных? есть виртуальные методы.
0
|
||
|
25 / 25 / 11
Регистрация: 07.12.2012
Сообщений: 169
|
|
| 09.07.2015, 21:21 | |
|
Avazart, ну например у нас есть абстрактный класс, в котором помимо чистых виртуальных методах есть метод, который выполняется в наследуемых классах одинаково, следовательно проще определить переменные здесь, и реализовать данный метод здесь используя данные переменные, а в наследуемых классах переопределить уровень доступа на закрытый.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 09.07.2015, 21:24 | ||
|
которая для всех работает одинаково. только причем здесь данные-члены?
0
|
||
|
|
||||||||||||||||
| 09.07.2015, 21:31 | ||||||||||||||||
|
xEmpire, Не уловил мысли.
Что к примеру будет если мы захотим изменить "базовое" поведение ? И вместо x нам нужно будет считать x1+x2 ?
0
|
||||||||||||||||
|
25 / 25 / 11
Регистрация: 07.12.2012
Сообщений: 169
|
|||||||
| 09.07.2015, 22:54 | |||||||
|
Если в нашем классе есть методы, которые должны быть для наследников реализованы по разному, они объявленные как чистые виртуальные методы, иначе это просто методы. Если чистый виртуальный метод должен быть реализацией (в наследуемом классе у перекрытого метода будет изменена область видимости на protected | private), а не интерфейсом в наследуемом классе, то он должен быть объявлен с областью видимости protected иначе, если использовать этот метод виртуальным вызовом, то вызов этого метода будет разрешен, независимо, какая область видимости этого метода в наследнике.
0
|
|||||||
|
|
|||
| 09.07.2015, 23:04 | |||
|
Добавлено через 2 минуты
0
|
|||
|
25 / 25 / 11
Регистрация: 07.12.2012
Сообщений: 169
|
|
| 09.07.2015, 23:13 | |
|
Avazart, Не знаю по чему, но при чтении топика, мне почему-то показалось, что при public наследовании, protected становится public, а тут такие дела
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 09.07.2015, 23:51 | ||
|
суть инкапсуляции: возможность использовать функционал без необходимости знать детали внутренней реализации. (нам не нужно знать какие есть данные-члены у суперкласса, что бы дергать его методы) суть инварианта: компонент гарантирует стабильность своей работы (отсутствие крашей, утечек ресурсов и тп), независимо от корректности вызывающей стороны. то есть, даже если вызывающая сторона запускает функцию с плохими аргументами, инвариантный компонент это пофиксит, и обработает ошибку. и никаких сбоев в его работе не будет. но если бы данные-члены были открытыми, тогда любой желающий мог бы залезть, и как то их подкрутить. и такой компонент вам уже ничего гарантировать не сможет. архитектура, которая состоит из компонентов, которые никому ничего не гарантирует - подвережна многочисленным ошибкам. плохо расширяется. хрупкая (плохо переносит изменения), и тп.
2
|
||
| 09.07.2015, 23:51 | |
|
Помогаю со студенческими работами здесь
20
пишем свой троян с нуля
Пишем свой первый Windows-драйвер Пишем свой интерпретатор языка BASIC Спецификатор доступа и виртуальные функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|