|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
Создаю Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Создаю Код: plaintext 1. 2. 3.
Сколько таблиц виртуальных методов будет создано ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 12:23 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
Таблицы виртуальных методов статические, они не создаются. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 12:34 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
Да но там ведь хранятся реальные адреса методов a,b А эти реальные адреса для каждого инстанса свои Разве не так ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 12:37 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
У каждого типа, а не у каждого экземпляра. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 12:40 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
Basil A. Sidorov У каждого типа, а не у каждого экземпляра. Но физически в памяти у каждого метода ведь свой адрес так ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 12:42 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
И? Есть пачка таблиц с адресами виртуальных методов. По одной таблице на каждый тип с виртуальными методами. Есть конкретный экземпляр с указателем на конкретную таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 12:45 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
shellyeА эти реальные адреса для каждого инстанса свои Нет, для всех инстансов они одинаковые. У классов данные - отдельно, код - отдельно. Оператор new создаёт только место под данные. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 12:45 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
Ну вот инстанс Child c1 у него у метода a адрес 0x01 инстанс Child c2 у него у метода a адрес 0x02 В одну и ту же таблицу как то запишется 0x01 и 0x02 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 12:45 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov shellyeА эти реальные адреса для каждого инстанса свои Нет, для всех инстансов они одинаковые. У классов данные - отдельно, код - отдельно. Оператор new создаёт только место под данные. А теперь понял Спасибо ! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 12:46 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov shellyeА эти реальные адреса для каждого инстанса свои Нет, для всех инстансов они одинаковые. У классов данные - отдельно, код - отдельно. Оператор new создаёт только место под данные. Плюс на указатель на VMT ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 12:51 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
SiemarglПлюс на указатель на VMT Если быть совсем точным, то по указателю на каждый виртуальный родительский класс, но это тоже данные, в точности как написано в стартовом посте, так что общей картины оно не меняет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 12:56 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov У классов данные - отдельно, код - отдельно. Оператор new создаёт только место под данные. Вы мне прямо глаза открыли Я то все время думал что сегмент когда каждый раз новый для каждого нового инстанса И никак в голове не клеилось с VMT ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 13:01 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
shellye, одна... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 23:54 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
shellye Да но там ведь хранятся реальные адреса методов a,b А эти реальные адреса для каждого инстанса свои Разве не так ? Не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.08.2021, 23:54 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
shellye Basil A. Sidorov У каждого типа, а не у каждого экземпляра. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2021, 12:04 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
rdb_devсуществует только одна статическая таблица виртуальных методов на каждый класс с виртуальными методами Несколько. На каждого предка по одной. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2021, 12:51 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, я так и написал - "одна на каждый класс с виртуальными методами". Формулировки разные, смысл один. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2021, 13:08 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
"Одна на каждого предка с виртуальными методами каждого класса с виртуальными методами" тогда уж... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2021, 13:13 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, можно и так... Но не обязательно "предка". Просто - каждого класса с виртуальными методами (независимо от наследования). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2021, 13:18 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
rdb_dev shellye пропущено... Но физически в памяти у каждого метода ведь свой адрес так ? Да ладно только одна... А как же тогда работает вызов виртуальных методов, если в распоряжении у нас только адрес виртуального метода базового класса? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2021, 14:45 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
petravесли в распоряжении у нас только адрес виртуального метода базового класса? Это в каких случаях такое бывает? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2021, 14:48 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravесли в распоряжении у нас только адрес виртуального метода базового класса? Это в каких случаях такое бывает? Получаем адрес виртуального метода базового класса. Указатель указывает на объект наследника. Вызываем - и вызывается метод класса наследника. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2021, 17:42 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
petravПолучаем адрес виртуального метода базового класса. Всё равно не понял. Можно кодом?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2021, 19:45 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov petravПолучаем адрес виртуального метода базового класса. Всё равно не понял. Можно кодом?.. Ну примерно так: Код: plaintext 1. 2. 3.
Вызвался метод класса наследника, а адрес брали у метода предка. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2021, 21:55 |
|
Таблица виртуальных методов
|
|||
---|---|---|---|
#18+
petravадрес брали у метода предка. Уверен, что адрес берётся у предка?.. [src]#include <stdio.h> struct Base { virtual void virtualMethod() { printf("Base\n"); } }; struct Derived: public Base { void virtualMethod() override { printf("Derived\n"); } }; int main() { auto ptr = &Base::virtualMethod; Base b; Derived d; printf("Base::virtualMethod = %p, Derived::virtualMethod = %p, ptr = %p\n", &b.virtualMethod, &d.virtualMethod, ptr); Base *obj = new Derived(); (obj->*ptr)(); } [src] Base::virtualMethod = 000000000023FDF0, Derived::virtualMethod = 000000000023FDE0, ptr = 000000000023FDD0 Derived Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2021, 22:23 |
|
|
start [/forum/topic.php?fid=57&msg=40089829&tid=2017183]: |
0ms |
get settings: |
12ms |
get forum list: |
27ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
597ms |
get tp. blocked users: |
2ms |
others: | 324ms |
total: | 1035ms |
0 / 0 |