![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
boobie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 16.9.2011 Репутация: нет Всего: нет |
Доброго времени суток!
Как получить доступ к закрытым по умолчанию членам базового класса из производного класса? Условный пример:
Как-то так... Это вообще возможно? Пишу в VC++ 2010. Ах, и еще... Френдовые функции использовать не надо. Это сообщение отредактировал(а) boobie - 22.8.2012, 07:58 |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Никак. Сделать их protected - вот правильное решение.
|
|||
|
||||
boobie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 16.9.2011 Репутация: нет Всего: нет |
Ну ладно... А если они "private" то никак, да?
|
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
никак. только при помощи грязного хака
который я ни в коем случае не рекомендую применять -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
А как же #define private protected перед наследованием, а затем #undef private? Вроде должно сработать, хотя сам не пробовал...
-------------------- ![]() |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
если в классе этот private вообще есть... тогда - да. проще. а если как в примере ТС (тип видимости по-умолчанию) ? Добавлено @ 09:40 Кстати, тогда должно помочь #define class struct ? Это сообщение отредактировал(а) borisbn - 22.8.2012, 09:41 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
kosmonaFFFt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 538 Регистрация: 14.4.2008 Где: Иннополис Репутация: нет Всего: 5 |
Хм, даже не задумывался, что можно использовать тип видимости по умолчанию - привык объявлять все в порядке public -> protected -> private...
З.Ы. Тогда #define class struct надо делать перед подключением заголовочного файла. -------------------- ![]() |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
как, собственно, и ![]() -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
NoviceF |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: 2 Всего: 2 |
Вроде бы никто не предложил вариант использовать просто функцию-член базового класса (не друга), типа
и вызвать её в наследнике.
Такой вариант не противоречит условиям автора ![]() |
||||
|
|||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
> Такой вариант не противоречит условиям автора
Из недосказанного автором (кстати, где он) я понял, что базовый класс менять нельзя. Иначе можно было бы просто заменить private на protected -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
NoviceF |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: 2 Всего: 2 |
>Иначе можно было бы просто заменить private на protected
вроде Мэйерс пишет, что protected члены класса вообще по сути не являются инкапсулированными, поэтому с этой точки зрения менять private на protected не стоило бы ![]() |
|||
|
||||
boobie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 16.9.2011 Репутация: нет Всего: нет |
Да тут я, тут ![]() Внимательно читал эту тему, видел все сообщения... Вопрос то и был - можно или нельзя. Поэтому вопросов больше нет - исправил базовый класс, поставил "protected", на всякий пожарный еще и "зафрендил" ![]() С define-ом как-то некрасиво получается... топорно как-то ![]() Грязный хак - очень красиво, но не всегда такое прокатит... Дописать функцию-член в базовый класс - в данном случае, конечно, сойдет... Но только в данном случае. Это сообщение отредактировал(а) boobie - 25.8.2012, 09:48 |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Ага... расследование показало, что изменять базовый всё-таки можно. Тогда лучше всего будет добавить функции доступа get/set, как и советовал мой земляк.
А френдить наследника в базовом мягко говоря нелогично -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
boobie |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 16.9.2011 Репутация: нет Всего: нет |
Да, можно... Но для начала я хотел убедиться, что без этого не обойтись.
У меня совсем другая задача - Разработать класс LowString (строка из прописных символов), наследованный от класса String (который я тоже сам написал). Так вот там эта функция... не нужна. Нужен был доступ к закрытым членам... Вот я и придумал такой пример и задал вопрос. ![]() Это сообщение отредактировал(а) boobie - 25.8.2012, 10:21 |
|||
|
||||
NoviceF |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: 2 Всего: 2 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "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. |