![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Aqs |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Здравствуйте!
Вопрос таков - как получить из внешней функции доступ к private полям и методам класса, при этом ничего в самом классе не изменяя ? (вариант объявить методы и поля как public тоже не подходит) Например, из main, модифицировать и вывести на экран поле a, и вызвать метод c, определенные в следующем тривиальном классе:
Подозреваю, что нужно как-то добираться до них через адреса, но сколько не пробовал - никак не выходит. Прошу совета. Это сообщение отредактировал(а) Aqs - 12.5.2010, 19:09 |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
через грязные хаки
но это непереносимо, стандарт не позволяет определять макросы с ключевыми словами.
Добавлено через 1 минуту и 9 секунд еще для доступа к переменным можно подменить класс идентичным через reinterpret_cast.. но зачем это надо? |
||||
|
|||||
| toxx |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 653 Регистрация: 4.3.2009 Где: НН Репутация: 2 Всего: 13 |
azesmcar
сорри за оффтоп , но напоминает идусский код...
Это сообщение отредактировал(а) toxx - 12.5.2010, 20:38 |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| Aqs |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Задание такое получил, в университете... |
|||
|
||||
| kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Да, всё правильно написали. -------------------- |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Не устану повторять, такие вопросы лучше задавать в google-е...он все знает
![]() Это сообщение отредактировал(а) azesmcar - 12.5.2010, 20:51 |
|||
|
||||
| Aqs |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Если бы было так легко найти, я бы уже давно нашел
Понадеялся что тут найдутся знающие люди, которые помогут. Кстати, вариант с грязными хаками неподходит - нужно что-то более "легальное" |
|||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Я показал что надо искать хотя если серьезно то тем в интернете дофига http://www.google.mu/search?hl=en&clie...q=&gs_rfai= легальный способ friend-ы, еще можно через шаблоны, игры с адресами - грязный хак.
до переменный можно добраться так, до функции насколько я помню никак не добраться без макросов. |
||||
|
|||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Препод, видимо, С++ по Подбельски учил...
Это сообщение отредактировал(а) Леопольд - 12.5.2010, 22:07 -------------------- вопросов больше чем ответов |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
есть только один нормальный способ это сделать, но только если у класса есть хоть одна неприватная шаблонная функция-член
описан у Саттера, причем очень красиво но уверен, препод его в виду не имел |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Добавлено через 3 минуты и 29 секунд А если с множественным наследованием или виртуальными функциями? Вроде бы, если это не POD, то behaviour is undefined. -------------------- вопросов больше чем ответов |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Я уже написал что это грязный и непереносимый хак, который к тому же касался конкретно описанного класса. Это сообщение отредактировал(а) azesmcar - 12.5.2010, 22:22 |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
azesmcar, я понимаю что ты знал почему это хак.
-------------------- вопросов больше чем ответов |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Вот мой вариант "бреда"
http://codepad.org/uRXBy0SZ
Твоему чокнутому профессору должно понравиться, ведь ещё и на vtbl завязано. Разберись что такое "виртуальная таблица функций" и по ушам ему этим проедь. Глядишь, зачтёт. Ты главное напирай на то, что это зачётно! З.Ы. Это пример как нельзя кодить. Это сообщение отредактировал(а) Леопольд - 12.5.2010, 23:03 -------------------- вопросов больше чем ответов |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |