|
17 / 14 / 3
Регистрация: 21.03.2017
Сообщений: 155
|
|||||||||||
Про dynamic и virtual14.01.2020, 22:08. Показов 2162. Ответов 8
Метки нет (Все метки)
Подскажите, пожалуйста. Никак не могу усвоить механизм работы таблиц виртуальных и динамических методов( Кучу описаний прочитал и все не сходится.
Везде пишут, что для полиморфных методов сначала реализация ищется в классе объекта, потом родителя и так далее, выше и выше. А если метод не полиморфный, то он просто вызывается, исходя из типа указателя. Но вот код:
Получается поиск реализации начался с c2 в данном случае? Также непонятно, откуда преимущество в скорости VMT перед DMT, ведь наличие в этой таблице у класса 2 реализации метода из класса 1 нам вовсе и не нужно? Зачем потомкам содержать инфу о методах родителя, если суть полиморфизма в вызове методов самих потомков, но никак не родительских. В каком месте рассуждений я пошел по ложному следу?)
0
|
|||||||||||
| 14.01.2020, 22:08 | |
|
Ответы с готовыми решениями:
8
Protected abstract virtual base pure virtual private destructor
|
|
|
|
| 14.01.2020, 23:13 | |
|
он не отменяет его в 3, об этом даже пишет компилятор как предупреждение, что этот метод уже виртуальный от класса с2. далее lc имеет тип с1, на ее базе вы создаете экземпляр класса с4, в с4 будет явно переопределено все, что иерархия знает о с1, так как дальнейшая реализация не известна еще. во втором классе если вы используете override + inherited, то вы наследуете в с2 все из с1 + дополняете базовый, естественно если вы и в 3 переопределяете, то наследуется все из 2, а 2 из 1 уже
1
|
|
|
17 / 14 / 3
Регистрация: 21.03.2017
Сообщений: 155
|
|||
| 15.01.2020, 00:36 [ТС] | |||
|
0
|
|||
|
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,352
|
||
| 15.01.2020, 01:03 | ||
|
1
|
||
|
|
||
| 15.01.2020, 01:29 | ||
|
моя логика такова, может быть я и не верно думаю.. хм.. базовый класс автомобиль у автомобиля 4 колеса, руль, коробка передач на 3 скорости, далее делаем автомобиль на базе этого с коробкой на 4 скорости, пусть будет авто "Жигули" далее взасовываем доп вал в коробку с парой шестеренок олучили коробку скоростей на 5 скоростей, осталась база та же "Жигули" желаем теперь жугуль с уже 5 скоростями который и едем на первый завод, на базовый и создаем на базе его желаемый авто с апгрейдами, а их то там не существует еще, максимум что получим жигуль с тремя скоростями и базовой комплектации, т.е. коробку сделали виртуальной, а все последующие заводы просто оверрайдовали сей метод. далее всхотнулось нам на одном этапе совсем по новой создать туже самую коробку, выбросить старую и внедрить вообще супер пупер новую, но так же называемую, класс начнет вякать, что в базовом классе есть такое, толкьо ты хочешь по другому... и как быть? Надо reintroduce этот метод, т.е. мы его переопределим заново, перекрываем старый виртуальный по крайней мере все классы что я не писал, работали и вели себя именно таким макаром, как я описал, писал с опыта, а не из умных книжек для полнопонимания надо пример "потолще" чуток написать, чтобы разобрать, что в базовом есть и чего там еще нет
1
|
||
|
Модератор
4115 / 2347 / 807
Регистрация: 15.11.2015
Сообщений: 9,352
|
|
| 15.01.2020, 09:24 | |
|
В продолжение аналогии. Сделали авто с КПП с 3 передачами и водителя научили пользоваться этой КПП. Потом на его базе сделали авто с дополнительной коробкой и посадили за руль прежнего водителя, он не знает про новую коробку и пользуется только первой КПП с 4 передачами.
1
|
|
|
Житель Земли
|
|
| 15.01.2020, 10:36 | |
|
2
|
|
|
17 / 14 / 3
Регистрация: 21.03.2017
Сообщений: 155
|
|
| 15.01.2020, 11:36 [ТС] | |
|
AzAtom, Arcor, DenNik, спасибо за ответы.
1) Правильно я понял, что в моем примере нужный метод будет искаться только в VMT класса c1, не заходя в VMT классов c2 и т.д.? 2) В этой таблице будет попытка найти метод класса с4, затем с3, но там содержатся только метод m класса с1, и метод класса c2. Метода m класса c3 там нет, он был бы, только если бы он в c3 оверрайдился или вообще не упоминался. И если бы метод m в с3 не упоминался, то в VMT класса c1 он бы тоже был, а в DMT его бы не было и пришлось бы программе лезть в DMT класса c2, а потом уже найти его в DMT класса с3... Так правильно?
0
|
|
|
Житель Земли
|
|
| 15.01.2020, 12:18 | |
|
на мой взгляд, виртуализировать override-метод - как-то некомильфо. Зачем это? в исходниках VCL такого нет и если рассуждать логически, смысла делать это нет. Как это будет работать, непонятно, поэтому не делай так и не задавайся пустыми вопросами
2
|
|
| 15.01.2020, 12:18 | |
|
Помогаю со студенческими работами здесь
9
Incompatible type for arg no. 3: Got "Dynamic Array Of Dynamic Array Of LongInt", expected "AnsiString" И снова про PopupMenu (было про длину, теперь про ширину) Dynamic property Dynamic Tables Dynamic SQL Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|