|
17 / 14 / 3
Регистрация: 21.03.2017
Сообщений: 155
|
|||||||||||
Про dynamic и virtual14.01.2020, 22:08. Показов 2246. Ответов 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
|
|||
|
Модератор
4149 / 2360 / 812
Регистрация: 15.11.2015
Сообщений: 9,462
|
||
| 15.01.2020, 01:03 | ||
|
1
|
||
|
|
||
| 15.01.2020, 01:29 | ||
|
моя логика такова, может быть я и не верно думаю.. хм.. базовый класс автомобиль у автомобиля 4 колеса, руль, коробка передач на 3 скорости, далее делаем автомобиль на базе этого с коробкой на 4 скорости, пусть будет авто "Жигули" далее взасовываем доп вал в коробку с парой шестеренок олучили коробку скоростей на 5 скоростей, осталась база та же "Жигули" желаем теперь жугуль с уже 5 скоростями который и едем на первый завод, на базовый и создаем на базе его желаемый авто с апгрейдами, а их то там не существует еще, максимум что получим жигуль с тремя скоростями и базовой комплектации, т.е. коробку сделали виртуальной, а все последующие заводы просто оверрайдовали сей метод. далее всхотнулось нам на одном этапе совсем по новой создать туже самую коробку, выбросить старую и внедрить вообще супер пупер новую, но так же называемую, класс начнет вякать, что в базовом классе есть такое, толкьо ты хочешь по другому... и как быть? Надо reintroduce этот метод, т.е. мы его переопределим заново, перекрываем старый виртуальный по крайней мере все классы что я не писал, работали и вели себя именно таким макаром, как я описал, писал с опыта, а не из умных книжек для полнопонимания надо пример "потолще" чуток написать, чтобы разобрать, что в базовом есть и чего там еще нет
1
|
||
|
Модератор
4149 / 2360 / 812
Регистрация: 15.11.2015
Сообщений: 9,462
|
|
| 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|