170 похожих чатов

Есть следующее: struct Mother { virtual void f() {} }; struct

Father
{
virtual void g() {}
};

struct Child : Mother, Father
{
};

В памяти объект типа Child будет таким: [Mother::vptr][Father::vptr].

Вопрос: когда происходит каст к указателю/ссылке одного из родителей этого объекта, то при вызове виртуальной функции через указатель/ссылку компилятор как-то распознает по какому из 2ух указателей нужно обратится к нужной vtable или как-то по другому происходит?

6 ответов

4 просмотра

Куда кастуют, метод того класса и вызывается. У тебя в чилде не переопределен f

Ну так если каст к предку то сразу понятно какую втбл брать же

Denys-Khodakov Автор вопроса
Denys Khodakov
Не обязательно, у родителей есть

И? Тут даже виртуальность f и g значения не имеет, ибо они не переопределены в ребенке.

Denys-Khodakov Автор вопроса
d7d1cd
И? Тут даже виртуальность f и g значения не имеет,...

Для примера этого достаточно. Хоть в потомке нет переопределений, vtable все равно будет, хоть такая же как и у родителей

Похожие вопросы

Обсуждают сегодня

Комрады, хотел уточнить. Проперть в OnDestroy юнита-хозяина по-прежнему доступна? И еще уточнение: finalization юнита наступает раньше или позже OnDestroy?
Ed Doc
40
Проблема с Windows scripting control Множество объектов получают iDispatch обертки и отдаются в скрипты. При этом скрипты могут эти обертки держать живыми очень долго, наприм...
Arioch The
16
Скажите, можно ли как-то "переместить" динамический массив из одной переменной в другую? Скажем, переместить из TList<> в TArray<>. Именно переместить, а не скопировать. Если ...
Eugene Krasnikov (ᴊɪɴ x)
37
Я тут пытаюсь переработать архитектуру подсистемы памяти ядра во что-то осмысленное. Есть pmm, который создает набор range’ей(пока что только для ядра, потом для юзерспейса), ...
Evg Resh
9
комрады, че-та лыжы не едут var tmpFont: TFont; begin tmpFont:= TFont.Create; try case rgFontColor.ItemIndex of 0: tmpFont.Color:= clWindowText; 1: tmpFo...
Ed Doc
34
Вот еще криповенькая штука. uMain.pas(517,3) Warning: Case statement does not handle all possible cases И ЧО? 😂
Александр (Rouse_) Багель
20
Интересно, нет ли какого-то способа получить из dll не адрес самой метки, а адрес со смещением?
The Bird of Hermes
54
то есть у тебя там Лазарь, не делфя?
Handatros
8
М-да. Почему бы просто со stringlist не работать?
Michael Longneck
23
коллеги, а есть простой способ определить, что программу из под Delphi запускают?
Михаил
10
Карта сайта