Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Вниз

override   Найти похожие ветки 

 
tigra   (2006-04-05 15:59) [0]

разжуйте пожалуйста в каких случаях необходимо использование override и для чего?
спасибо


 
Юрий Зотов ©   (2006-04-05 16:03) [1]

Вас устроит такой ответ: для перекрытия виртуальных и динамических методов?

Если нет, то придется сначала объяснять основы ООП и объектной модели Delphi. По объему это потянет на главу книги - так, может быть, лучше ее и почитать?


 
Сергей М. ©   (2006-04-05 16:04) [2]

Для перекрытия виртуальных и динамических одноименных методов классов-предков


 
Юрий Зотов ©   (2006-04-05 16:35) [3]

> Сергей М. ©   (05.04.06 16:04) [2]

Можно перекрыть НЕодноименный метод?


 
Jeer ©   (2006-04-05 17:57) [4]

Юрий Зотов ©   (05.04.06 16:35) [3]

Нельзя, но это  [2] - чтобы и попыток не делали:))


 
TUser ©   (2006-04-05 19:30) [5]

Коротко говоря - у тебя есть класс-предок. У него там написан виртуальный метод. Виртуальный, это означет, что его адрес заранее узнать нельзя. Поэтому в отличае от обычного (да простят меня за терминологию) метода, при вызове виртуального сначала произойдет поиск в таблице VMT. А у наследника в этой таблице адрес может быть просто подменен на новый - это если ты используешь сабжевую инструкцию. С данамическими почти так же.

Да простят меня за поверхностность описания.


 
Anatoly Podgoretsky ©   (2006-04-05 20:06) [6]

TUser ©   (05.04.06 19:30) [5]
Виртуальные - это когда будет казаться, что у тебя один метод, а на самом деле другой. Меня тоже простите :-)


 
Джо ©   (2006-04-05 20:10) [7]

> пожалуйста в каких случаях необходимо использование override

Вот в этом случае, пожалуй, реально необходимо.

 TAbstractFigure = class
 public
   procedure Draw; virtual; abstract;
 end;

 TTriangle = class (TAbstractFigure)
 public
   procedure Draw; override;
 end;


 
Amoeba ©   (2006-04-06 10:52) [8]


> в каких случаях необходимо использование override


В частности в следующих случаях всегда (иначе наступишь на грабли):
1. У Destroy своих классов (поскольку у TObject и всех его потомков он виртуальный)
2. У конструкторов компонентов (аналогичная ситуация)


 
tesseract ©   (2006-04-06 11:13) [9]

преимущество override - всегда можно вызвать перекрытый метод  через inherited.

попытка перекрыть виртуальный метод ещё раз указав virtual приведёт к его полному перекрытию и невозможности получить досту к перекрытому методу.

в случае перекрытия не вируального/динамического метода через reintroduce (вообще она просто отключает завывания компилятора) такого сделать нельзя.

виртуальные методы быстрее динамических. Но динамические экономят память.


 
MBo ©   (2006-04-06 13:03) [10]

>Amoeba ©   (06.04.06 10:52) [8]
>В частности в следующих случаях всегда

Насчет "всегда" - это слишком сильно сказано.
И деструкторы, и конструкторы нуждаются в перекрытии, только если это необходимо (как и другие методы).


 
Amoeba ©   (2006-04-06 14:23) [11]


> MBo ©   (06.04.06 13:03) [10]

Подразумевалось, что именно в случае их перекрытия. А как еще?


 
MBo ©   (2006-04-06 14:27) [12]

>Amoeba ©   (06.04.06 14:23) [11]
Виноват, я неверно воспринял.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.014 c
1-1142613658
on-lite
2006-03-17 19:40
2006.04.23
Включение ScrollLock


15-1143862359
Pazitron_Brain
2006-04-01 07:32
2006.04.23
Почему этот скрипт не отображает результат?


2-1144595174
Radagast
2006-04-09 19:06
2006.04.23
Помогите, пожалуйста, разобраться с объектами


2-1144490251
TwinGL
2006-04-08 13:57
2006.04.23
Аццкий рефрешь в TWebBrowser


3-1140954126
g.town
2006-02-26 14:42
2006.04.23
CDX





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский