|
|
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. есть базовая форма. в ней процедура декларированная как virtual. базовая форма принимает сообщение инициализации и вызывает этот виртуальный метод. код в базовой для этой процедуры имеется. от этой базовой последовательно унаследованы еще три формы. в каждой форме есть эта процедура с override. те цепочка такая. форма3-форма2-форма1-форма базовая. когда базовая получает сообщение и выполняет этот виртуальный метод - вызывается процедура из самой верхней формы. те из форма3. вроде как и задумано. но. как сделать в данном случае такую последовательность выполнения. форма1-форма2-форма3-базовая форма. если в процедуре в форма3 ставлю сначала inherited, то переходит на код базовой формы. а хотелось бы, чтоб на код форма2. Реально ли так сделать?) Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 16:37:22 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
AndrewVLесли в процедуре в форма3 ставлю сначала inherited, то переходит на код базовой формы. а хотелось бы, чтоб на код форма2. Значит inherited у тебя какой-то неправильной системы, поскольку у всех остальных оно вызывает как раз метод только непосредственного предка. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 16:40:26 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
Создана форма3. Хочется, чтоб при вызова виртуального метода, выполнялся код дедушки->папы->свой->прадедушки Так? Плохое проектирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 17:58:00 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
AndrewVL, я в данном случае полиморфную виртуальную функцию я бы разделил на две, а в каждом классе-наследнике написал бы свою, чтобы можно было управлять Для базового класса Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Для формы 1: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Для формы 2: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Ну для форму 3, раз уж нужно AndrewVLкак сделать в данном случае такую последовательность выполнения. форма1-форма2-форма3-базовая форма. ... - оформил бы так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 18:09:46 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
AndrewVLкак сделать в данном случае такую последовательность выполнения. форма1-форма2-форма3-базовая форма. Попробуйте объяснить, зачем Вам такое делать. Скорее всего, Вы решаете задачу неподходящими средствами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 18:27:52 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
Один из вариантов декомпозиции(он же самый простой) такой: Делаете свою виртуальную функцию статической, а нутра ее переписываете так: Код: pascal 1. 2. 3. 4. 5. 6. BeforeFoo и AfterFoo - виртуальные. Уже можно рулить. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Если BeforeFoo, AfterFoo не достаточно, можно добавить еще Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 18:34:29 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
softwarerAndrewVLкак сделать в данном случае такую последовательность выполнения. форма1-форма2-форма3-базовая форма. Попробуйте объяснить, зачем Вам такое делать. Скорее всего, Вы решаете задачу неподходящими средствами. Может быть. А зачем. Базовая форма открывает датасеты и настраивает форму для всех типов форм. А уже у наследованных- поднастройка. Вот и должен сначала вызываться базовый. А потом по цепочке наследования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 18:41:02 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
чччД, Задумывалось так. Базовая форма делает базовые настройки. А 30 детей после базовой настройки делают свои. Как раз и делалось, чтоб н заморачиваться с function1, function2 и тд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 18:43:26 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
AX-ClassОдин из вариантов декомпозиции(он же самый простой) такой: Делаете свою виртуальную функцию статической, а нутра ее переписываете так: Код: pascal 1. 2. 3. 4. 5. 6. BeforeFoo и AfterFoo - виртуальные. Уже можно рулить. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Если BeforeFoo, AfterFoo не достаточно, можно добавить еще Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. У меня вроде так и сделано. Не особо понятно почему inherited так работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 18:44:53 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
AndrewVL, Тут тупо 2 разных метода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 18:44:58 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
AX-ClassAndrewVL, Тут тупо 2 разных метода. Относилось к предыдущему сообщению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 18:46:29 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
AndrewVLЗадумывалось так. Базовая форма делает базовые настройки. А 30 детей после базовой настройки делают свои. Как раз и делалось, чтоб н заморачиваться с function1, function2 и тд Пока не вижу, в чём проблема, зато вижу, что это описание противоречит выше сказанному "как сделать в данном случае такую последовательность выполнения. форма1-форма2-форма3-базовая форма". Описанное делается так: Код: pascal 1. 2. 3. 4. 5. И в чём же на самом деле вопрос? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 18:55:20 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovAndrewVLесли в процедуре в форма3 ставлю сначала inherited, то переходит на код базовой формы. а хотелось бы, чтоб на код форма2. Значит inherited у тебя какой-то неправильной системы, поскольку у всех остальных оно вызывает как раз метод только непосредственного предка. Возможно. Может так работать по той причине, что в цепочке форм форма3 форма2 форма1 базовая функция переопределена в 3,1? А в форма 2 она не переопределена? Хотя все равно должно работать все ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 19:29:48 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
хм. была процедура в базовом классе и в дочерних объявлена в разных секциях класса. перенес все в protected и наследование заработало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2017, 20:39:26 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
всё наследуемое вообще лучше всего в protected и хранить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 01:02:41 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
makhaonвсё наследуемое вообще лучше всего в protected и хранить. "Чисто для своих" ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 02:40:32 |
|
||
|
наследование и виртуальные методы
|
|||
|---|---|---|---|
|
#18+
makhaonвсё наследуемое вообще лучше всего в protected и хранить. Хранить следует там, где это удобно для решения задач, и не иначе. Если нечто виртуальное используется извне, то место ему в public. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2017, 10:35:22 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=139&tid=2042125]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
72ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
69ms |
get tp. blocked users: |
2ms |
| others: | 235ms |
| total: | 426ms |

| 0 / 0 |
