![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
||||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
-------------------- вопросов больше чем ответов |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
||||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Обрати внимание на то, что функция b реализована только в A классе. ptr->b() вызывается через vtbl класса A. Я же говорю, зачётно.
Это сообщение отредактировал(а) Леопольд - 12.5.2010, 23:12 -------------------- вопросов больше чем ответов |
|||
|
||||
| Aqs |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
Спасибо за идею, но... Исходный класс изменять нельзя вообще никак, в этом-то и вся соль - у меня тоже была мысль что-то замутить с виртуальными функциями, но без переобъявления метода b как виртуального и в классе А, ничего не выйдет. А делать этого нельзя, по условию. Да и с виртуальными функциями уже по курсу имели тесное общение - мозги ему запудрить неполучится
С полями вроде разобрался... Идея похожа на Вашу (используется так же вспомогательный класс) :
А вот с методами по-прежнему непонятно что делать. Это сообщение отредактировал(а) Aqs - 12.5.2010, 23:15 |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Aqs, я ему верю больше чем твоему преподу - маньяку. -------------------- вопросов больше чем ответов |
|||
|
||||
| Aqs |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
||||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
http://codepad.org/6Ll4wy13
Нельзя взять адрес приватной функции. Это сообщение отредактировал(а) Леопольд - 12.5.2010, 23:26 -------------------- вопросов больше чем ответов |
|||
|
||||
| mes |
|
||||||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
попробую развеять сомнения
надеюсь очепяток не допустил Это сообщение отредактировал(а) mes - 13.5.2010, 12:30 |
||||||||||
|
|||||||||||
| Aqs |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 7 Регистрация: 12.5.2010 Репутация: нет Всего: нет |
mes, спасибо! Действительно, всё отлично работает
Только вот осталось непонятным, почему обязательно нужно объявлять b() вне класса A ? Если b() будет объявлена внутри, то получается нужно в структуре продублировать код функции? |
|||
|
||||
| mes |
|
||||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ага
или можно поступить проще, воспользоваться дефайнами, как предлaгал azesmzar, но применить его только в a_hack.cpp файле, так сказать компромисс - весь хак будет собран в одном месте и никого другого не зацепит..
|
||||||
|
|||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
mes, это нестандартно
сильно подозреваю, что твое решение нестандартно тоже, хотя четких доказательств нету |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну тут доказывать то сильно и не надо - достаточно того, что у нас получаются два разных описания класса насчет нестандартности метода, я думаю, также говорили префиксы имен функций hack_ но .. раз преподу хочется, сделаем ему приятное Это сообщение отредактировал(а) mes - 13.5.2010, 18:06 |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
вот я и не знаю, запрещает ли это стандарт явно шаблонные методы тоже могут привести к разным описаниям... |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
нда.. сформулировал я неправильно.. разные описания это не проблема, зависит от того что разное имелось ввиду то, что описание приводит к различным "представлениям". В стандарте (раздел ODR) накладывается ряд ограничений, после которых обе копии считаются идентичными, но рассматривается ли там наша ситуация, я так и не понял |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |