Информация об изменениях

Сообщение Re: Вопрос про VPTR и VTABLE от 19.04.2017 6:41

Изменено 19.04.2017 6:42 rg45

Re: Вопрос про VPTR и VTABLE
Здравствуйте, straw dog, Вы писали:

SD>Хочу разобраться в следующем вопросе.

SD>...
SD>Далее как я это себе представляю: при кастинге B к А, vtable берется от B, но "урезается" до размера vtable класса А, поэтому при компиляции индекса метода baz в vtable не "обнаруживается". Как это все работает на самом деле?

Прежде чем вникать, как это устроено, нужно понять, как этим правильно пользоваться. Виртуальные функции позволяют по-разному реализовать один и тот же метод в разных производных классах, при этом этот метод должен быть определен в их общем базовом классе. А как именно устроена виртуальная таблица — это уже детали реализации и в каждом компиляторе это сделано по-своему. В стандарте языка C++ даже нет терминов таких как "virtual table" или "vtable" — описан лишь синтаксис и производимый эффект.
Re: Вопрос про VPTR и VTABLE
Здравствуйте, straw dog, Вы писали:

SD>Хочу разобраться в следующем вопросе.

SD>...
SD>Далее как я это себе представляю: при кастинге B к А, vtable берется от B, но "урезается" до размера vtable класса А, поэтому при компиляции индекса метода baz в vtable не "обнаруживается". Как это все работает на самом деле?

Прежде чем вникать, как это устроено, нужно понять, как этим правильно пользоваться. Виртуальные функции позволяют по-разному реализовать один и тот же метод в разных производных классах, при этом этот метод должен быть объявлен в их общем базовом классе. А как именно устроена виртуальная таблица — это уже детали реализации и в каждом компиляторе это сделано по-своему. В стандарте языка C++ даже нет терминов таких как "virtual table" или "vtable" — описан лишь синтаксис и производимый эффект.