![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
wallstreet |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 11.8.2011 Репутация: нет Всего: нет |
Всем привет.
Как можно получить доступ дочернему классу А к защищенному свойству базового класса?
|
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Это отношения 2х объектов, а не части и целого. В этом случае наследование не помогает. Можно зафрендить классы (friend), тогда объекты смогут лазить друг к другу, но это плохой способ написания кода. В ООП не принято менять свойства другого объект напрямую. Только через посылку сообщения (вызов функции) . Френды используются когда строиться композиционная логика. Т.е. некоторые объекты не являются самостоятельной сущностью, а служат для дополнения логики некоторого главного объекта, тогда эти вспомогательные объекты будут ему друзьями. К дополнению через наследование это не относится.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
wallstreet |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 11.8.2011 Репутация: нет Всего: нет |
Спасибо, Alexeis
у меня задача такая: 1. Есть текстовый файл с данными 2. Есть алгоритм анализа этих данных. Отсюда следует, что необходимо эти данные: 1) распарсить, 2) разложить по контейнерам для дальнейшего, более удобного доступа к ним и в итоге 3) проанализировать и 4) сделать вывод. В моем случае класс Base занимается 1) и 2) пунктами и переменная "а" это ничто иное как контейнер с распарсеными данными. В классе A прописаны методы анализа, т.е. занимается пунктом 3) из задачи, именно поэтому ему нужен доступ к контейнеру с данными. Подскажите, какую объектную модель было бы правильнее реализовать в моем случае? |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 4 Всего: 459 |
Если класс A оперирует данными нескольких контейнеров то это классический пример паттерна "алгоритм". Класс контейнер реализует подкласс итератор для доступа к своим данным. "алгоритм" использует итератор для навигации по данным. В качестве примера можно привести алгоритм std::sort может сортировать данные различных контейнеров, например данные класса std::vector или std::list. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
wallstreet |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 11.8.2011 Репутация: нет Всего: нет |
Спасибо, буду копать!)
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Плохой пример - std::list и std::sort несовместимы. Тут или std::sort надо заменить на что-то иное (например, std::fill), или std::list на std::deque. |
|||
|
||||
TarasProger |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 5.8.2015 Репутация: нет Всего: нет |
Добавлено @ 10:01 А зачем вообще понадобилось декларировать параметр типом ссылки на Base? Можно же использовать сам класс A: так как он - наследник, то у него тоже есть protected-поле a типа int, ведь любой экземпляр A одновременно является и экземпляром всех его предков. И к своему полю доступ есть. Это сообщение отредактировал(а) TarasProger - 7.8.2015, 10:02 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |