![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
![]() ![]() |
![]() |
Vardes |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
Всё ещё пытаюсь разобраться с Delphi,поэтому такой вам вопрос...Что означает перекрывание методов с помощью override,зачем это нужно,если мы можем просто в потомке создать одноимённый метод с другими пар-ми,и просто его запустить...?
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата если мы можем просто в потомке создать одноимённый метод с другими пар-ми, и просто его запустить...? А если НЕ в потомке, а в том же классе мне понадобится создать 2 метода с одинаковым именем, но разными параметрами, тогда как без Override? |
Vardes |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
А можно на это пример привести?
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
А попробуй откомпилировать:
...Только не спрашивай, зачем ЭТО нужно... Вот нужно мне это и все... Я не хочу запоминать десять имен типа print_integer/print_double/print_string/print_char ..., а хочу использовать перегрузку и работать с print, а что именно должно быть вызвано - это пусть компилятор разбирается... |
Vardes |
![]()
Сообщение
#5
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
А если я сделаю вот так:
Код type TD1 = class(Tobject) x1:integer; procedure Do(x1:integer); end; TD2 = class(T1) x2:integer; procedure Do(x2:integer); var ........... procedure TD1.Do(x1:integer) begin x1:=X1*X1; end; procedure TD2.Do(x2:integer) begin x2:=X2/X2; end; ............ D1.Do; D2.Do; метод потомка автоматически перекроет метод предка без всякого override? Сообщение отредактировано: Vardes - |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
А с НЕвиртуальными методами вообще не используется Override... Я там выше ошибся кстати, надо не Override, а Overload добавлять...
А по поводу разницы между методом С override и БЕЗ него - написано в хелпе: Цитата(D6 Help) Overriding versus hiding Вот тебе и разница...If a method declaration specifies the same method identifier and parameter signature as an inherited method, but doesn’t include override, the new declaration merely hides the inherited one without overriding it. Both methods exist in the descendant class, where the method name is statically bound. |
мисс_граффити |
![]()
Сообщение
#7
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Попробуй запустить две программки:
1. TA=class 2. TA=class Я думаю, разницу увидишь. Цитата А с НЕвиртуальными методами вообще не используется Override... Динамический рассматривается как разновидность виртуального? А то я всегда мучаюсь - как бы их одним словом обозвать. Сообщение отредактировано: мисс_граффити - -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
Цитата Динамический рассматривается как разновидность виртуального? Это фактически одно и то же:Цитата(D6 Help) Virtual versus dynamic Virtual and dynamic methods are semantically equivalent. They differ only in the implementation of method-call dispatching at runtime. Virtual methods optimize for speed, while dynamic methods optimize for code size. |
мисс_граффити |
![]()
Сообщение
#9
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
но ведь:
Цитата Virtual methods optimize for speed, while dynamic methods optimize for code size. достигается за счет разной реализации? то есть это по сути разные вещи... а обобщающего слова не придумали ![]() -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Юля, кстати... Вопрос на засыпку: что будет выведено в результате выполнения следующего кода:
uses sysutils;(НЕ override !!! Виртуальные функции... ) Если можно - без использования компилятора, что ТЕОРЕТИЧЕСКИ должно быть выведено? ![]() |
Bokul |
![]()
Сообщение
#11
|
![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация: ![]() ![]() ![]() |
Цитата Вопрос на засыпку: что будет выведено в результате выполнения следующего кода: Спойлер (Показать/Скрыть)
-------------------- Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее. |
мисс_граффити |
![]()
Сообщение
#12
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
в таком виде - ошибка ;)
а по сути - раз override нет, то, думаю, 13... то есть вызовется first от TA -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
![]() Еще варианты будут? Кстати, дополнение к вопросу: как изменится картина (если изменится), если я опишу first вот так: type ![]() Цитата в таком виде - ошибка ;) С чего бы? Нет тут никакой ошибки ![]() |
мисс_граффити |
![]()
Сообщение
#14
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
а... сорри. про консольные приложения забыла.
мне кажется, не изменится никак. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Хорошо, допустим... А теперь - контрольный выстрел:
![]() Что будет сейчас? uses sysutils; ![]() |
мисс_граффити |
![]()
Сообщение
#16
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
по-моему, даже такое изменение в коде:
constructor tb.create; ни на что не повлияет. а выдаст она -3. пояснения написать? Сообщение отредактировано: мисс_граффити - -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Да... Вот теперь меня и интересуют пояснения, ПОЧЕМУ один и тот же код по-твоему при использовании классов выдаст одно, а при использовании объектов - другое... Объяснение этому факту приведи, пожалуйста... (я надеюсь это не "проверено на компиляторе"? Меня интересует логика...)
|
Vardes |
![]()
Сообщение
#18
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ух ты!!!!
Какое здесь обсуждение завели,спасибо вам...теперь хоть стал немного разбираться...Но возникли ещё вопросы по поводу визуальных компонент.... Есть такой класс в Delphi,как TStaticText,я его использую,для просмотра значения переменной в цикле (цикл большой,от 1000),ну так вот,где-то первые значения мне строка показывает,а потом переменные перестают выводиться на экран в течение цикла, как только он заканчивается выводится последний результат.Из-за чего такое может быть?И ещё....никак не могу понять как работать с классом TspinEdit...могли бы вы привести пример для задания значения переменной?Заранее спасибо ![]() Сообщение отредактировано: Vardes - |
мисс_граффити |
![]()
Сообщение
#19
|
![]() просто человек ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
по-моему, после такой дискуссии начать разбираться нереально.
![]() volvo, в общем это.... знаний немного, так что на 90% собственное домысливание (с применением женской логики). соответственно, могу ошибаться... отталкивалась от того, что object есть и в паскале, а class - только в делфи. (коряво по терминологии, понимаю, что глупо сравнивать язык и среду... но, думаю, идею уловил). object оставили, как мне кажется, для совместимости... а раз для совместимости - значит, работать они должны по тому же принципу, что и в паскале (а иначе какой смысл?). что такое override паскаль не знает, а что такое virtual - прекрасно понимает. поскольку у нас есть конструктор (хоть и пустой, на первый взгляд ничего не делающий) - таблица вирт.методов создается как положено. итак, раз virtual, надо использовать метод потомка. теперь пример с классами. делфи про override прекрасно знает. а раз его нет - значит, и перекрывания не происходит (а чего перекрывать, если не просят?)... Vardes, по второму вопросу: a:integer; Сообщение отредактировано: мисс_граффити - -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
Vardes |
![]()
Сообщение
#20
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 131 Пол: Мужской Репутация: ![]() ![]() ![]() |
Хотелось бы ещё узнать про TStaticTest...как можно увеличить в этом классе дину строки,а то показывает мне только 14 знаков после запятой (у меня так переменная меняется),а надо больше)
Сообщение отредактировано: Vardes - |
![]() ![]() |
![]() |
Текстовая версия | 11.02.2025 3:42 |