Начинающим С++ программистам часто бывает непонятно каким образом и где хранятся виртуальные функции. Статья Storage Layout of Polymorphic Objects рассказ в картинках о том, как будут размещены поля и виртуальные функции объекта, рекомендую.
via Code_Analysis
Не хватает еще одного рисунка - для подкласса, в котором некоторые виртуальные функции не замещены. В таблице, соответственно, будут указатели как на функции подкласса (замещенные), так и на функции базового класса (просто копия указателей из таблицы базового класса).
ОтветитьУдалитьТема множественного наследования не раскрыта.
ОтветитьУдалить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
Тема совершенно не раскрыта(
ОтветитьУдалить