|
17 / 14 / 3
Регистрация: 21.03.2017
Сообщений: 155
|
|||||||||||
Про dynamic и virtual14.01.2020, 22:08. Показов 2160. Ответов 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,347
|
||
| 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,347
|
|
| 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Сочетание глобально распределённой вычислительной мощности и инновационных. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|