Начинающим С++ программистам часто бывает непонятно каким образом и где хранятся виртуальные функции. Статья Storage Layout of Polymorphic Objects рассказ в картинках о том, как будут размещены поля и виртуальные функции объекта, рекомендую.
via Code_Analysis
Quaternions and spherical trigonometry
6 дней назад
11 коммент.:
Не хватает еще одного рисунка - для подкласса, в котором некоторые виртуальные функции не замещены. В таблице, соответственно, будут указатели как на функции подкласса (замещенные), так и на функции базового класса (просто копия указателей из таблицы базового класса).
Тема множественного наследования не раскрыта.
Jakobz, именно. Тривиальности разобраны, а "мяса" нет.
Более глубокое описание есть в статье "C++: Under the Hood" от одного из разработчиков компилятора Visual C++:
http://www.openrce.org/articles/files/jangrayhood.pdf
В ней разбирается всё что можно: виртуальное наследование, множественное наследование, shadowing виртуальный функций, преобразование указателей со сдвигами, как происходит доступ к данным, обработка исключений и прочее.
migmit
Тривиальности разобраны, а "мяса" нет.
Больше мяса можно найти в книге Липпмана Inside the C++ Object Model
NULL_PTR, спасибо, прочитал, приятно. Alena, тоже спасибо.
Очень полезна для понимания вопроса недавняя публикация Страуструпа сотоварищи. Там и про множественное наследование, и про RTTI. И можно сделать интересные выводы: например, множественное наследование в сочетании с RTTI легко приводит к экспоненциальному росту количества vtables.
Вот в этой статье Страуструпа тоже неплохо описано.
Multiple Inheritance For C++
http://static.usenix.org/publications/compsystems/1989/fall_stroustrup.pdf
Убогая статья, всего мало, мне, как жалкому студенту, непонятно, как и где функции действительно хранятся - в виде чего, в каком виде (статическая память, куча, динамическая, или еще какая нибудь плюсовая магия)
Здесь подробно рассказано о виртуальных функциях
https://web-ide.ru/j/easyblog-2/entry/8-virtualnye-funktsii-nizkourovnevyj-vzglyad
Тема совершенно не раскрыта(
Отправить комментарий