Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
более того 26.07.01 03:12 Число просмотров: 842
Автор: Gesha Статус: Незарегистрированный пользователь
|
> конечно же можно включить в main(). но повторюсь - цель - > разрушить дочернюю таблицу виртуальных ф-ий и создать > родительский. Именно так все и происходит, хорош народ пужать ;))
В общем, исследование кода сгенерированного VC++ 6.0 показало, что при использовании ссылки или указателя генерируется переадресация через vtbl и т.п., а при непосредственном обращении к объекту вызывается... Child::PrintMsg() ! Т.е., компилятор НАГЛО ИГНОРИРУЕТ vtbl вообще!
Фенька, похоже, в том, что при вызове метода через ссылку или указатель компилятор не имеет права делать предположений о типе объекта, к которому попадет вызов и, следовательно, создает код, обрабатывающий vtbl, что, в общем, совершенно верно и в твоем примере приводит к вызову Parrent::PrintMsg().
Другое дело, если компилятор при вызове метода ТОЧНО ЗНАЕТ ТИП ОБЪЕКТА (или, во всяком случае, он так считает ;) ). По-видимому, он предполагает, что тип не может измениться во время существования объекта и по этому поводу на разборе vtbl можно сэкономить. На мой взгляд, такое поведение вполне логично для языка со статической типизацией, хотя и оставляет возможности для целой кучи разнообразных трюков.
Однако, остались вопросы:
1. Что думает по этому поводу Страуструп ?
2. Что пишет по этому поводу ANSI ?
3. Как сделаны другие компиляторы?
> правильно. иначе можно доказать, что *pChild != child; что Угу, так и есть :))), только еще хуже: child != child ;)
> собственно сделал XR. и код который ты показал тоже верный, > такое я тоже пробовал. много чего извращенного делал. но > разве так и должно быть? виртуальные ф-ии должны быть > динамичные иначе на хрен они нужны Виртуальные функции нужны как раз для реализации полиморфизма обращением через указатель или ссылку.
|
|
|