Сообщение 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" — описан лишь синтаксис и производимый эффект.
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" — описан лишь синтаксис и производимый эффект.
SD>Хочу разобраться в следующем вопросе.
SD>...
SD>Далее как я это себе представляю: при кастинге B к А, vtable берется от B, но "урезается" до размера vtable класса А, поэтому при компиляции индекса метода baz в vtable не "обнаруживается". Как это все работает на самом деле?
Прежде чем вникать, как это устроено, нужно понять, как этим правильно пользоваться. Виртуальные функции позволяют по-разному реализовать один и тот же метод в разных производных классах, при этом этот метод должен быть объявлен в их общем базовом классе. А как именно устроена виртуальная таблица — это уже детали реализации и в каждом компиляторе это сделано по-своему. В стандарте языка C++ даже нет терминов таких как "virtual table" или "vtable" — описан лишь синтаксис и производимый эффект.