которой подробно и очень глубоко описывается работа ключевого слова virtual?
В любом учебнике...
я бы хотел на уровне ассемблера, в учебнике стивена пратта нет такой информации
А не надо на уровне ассемблера
Так это же зависит от компилятора, как оно будет работать
я бы хотел примерно понимать что там происходит
В реальности реализация +- одинаковая.
Посмотрите в сторону MS ABI и COM
Что, про vtable совсем ничего там?
есть, ну если честно я постоянно перечитываю и постоянно забываю, при том что как это работает на уровне практики знаю
в каждом экземпляре класса, имеющего виртуальные функции, есть скрытое поле vtable. оно указывает на некий дескриптор класса, сожержащий указатели на все виртуальные функции этого класса: struct vtable_class_X { f1_ptr = указатель на фукнцию X::virt_f1(); f2_ptr = указатель на фукнцию X::virt_f2(); ... } при вызове виртуальной функции f1 из экземпляра класса берётся поле vtable, из vtable_class_X берётся f1_ptr, и вызывается функция на которую этот f1_ptr указывает
хотел подобрать алтерантивный источник
спасибо за пояснение, но я все равно не очень понял
ну вот есть классы A {int i; virtual void f1();} B : A {int k; virtual void f1() override;} в реальности в каждый из них добавялется скрытое поле vtable: A_ { void* vtable; int i;} B_ { void* vtable; int i; int k;} пока понятно?
Обсуждают сегодня