powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / Таблица виртуальных методов
7 сообщений из 32, страница 2 из 2
Таблица виртуальных методов
    #40091120
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravадрес брали у метода предка.

Уверен, что адрес берётся у предка?..

Синтаксически у предка. На практике, я думаю, вот тут:

Код: plaintext
1.
auto ptr = &Base::virtualMethod;


Возвращается адрес прокси-функции заточенной на вызов virtualMethod().
...
Рейтинг: 0 / 0
Таблица виртуальных методов
    #40091157
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Да ладно только одна... А как же тогда работает вызов виртуальных методов, если в распоряжении у нас только адрес виртуального метода базового класса?
Зависит от реализации компилятора...
Как правило, адресом виртуального метода является индекс указателя на метод в vtable. Соответственно, при вызове виртуального метода используется соответствующая классу таблица vtable и индекс метода.
...
Рейтинг: 0 / 0
Таблица виртуальных методов
    #40091336
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev
petrav
Да ладно только одна... А как же тогда работает вызов виртуальных методов, если в распоряжении у нас только адрес виртуального метода базового класса?
Зависит от реализации компилятора...
Как правило, адресом виртуального метода является индекс указателя на метод в vtable. Соответственно, при вызове виртуального метода используется соответствующая классу таблица vtable и индекс метода.

Я думал о таком варианте, но в случае Студии это явно не так. Было бы интересно узнать почему.
...
Рейтинг: 0 / 0
Таблица виртуальных методов
    #40092324
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,

встаёт вопрос как проверить, что функция виртуальная перегружена
...
Рейтинг: 0 / 0
Таблица виртуальных методов
    #40092402
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Я думал о таком варианте, но в случае Студии это явно не так. Было бы интересно узнать почему.

Истоки этого в том что тип указателя не меняется от того виртуальная ф-я или нет, хотя вызываются они по разному.
Это значит что вызывающий код должен в рантайме определить какой это указатель.
В GCC в указателе есть флаг и происходит проверка этого флага и ветвление.
В VS чтобы избежать ветвления хранят адрес прокси.
Возможно какой-то из этих подходов лучше, но думаю что причина по которой подходы разные в том что когда-то было выбрано какое-то решение, но потом так просто сменить ABI уже не получилось.
...
Рейтинг: 0 / 0
Таблица виртуальных методов
    #40092407
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВ GCC в указателе есть флаг и происходит проверка этого флага и ветвление.
В VS чтобы избежать ветвления хранят адрес прокси.

Вообще-то вывод выше из GCC, так что там, скорее всего, тоже прокси.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Таблица виртуальных методов
    #40092436
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Вообще-то вывод выше из GCC, так что там, скорее всего, тоже прокси.

В вашем коде компилятор знает конкретные адреса функций каждого объекта потому что видит весь код.
Я же говорил про чистый полиморфизм - когда есть только указатель на базовый класс и указатель на его метод который надо вызвать.
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Таблица виртуальных методов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]