Главная страница
    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.013 c
2-1144448650
ctudent
2006-04-08 02:24
2006.04.23
TreeView+база данных


15-1143890525
Alexander Panov
2006-04-01 15:22
2006.04.23
Что это было?


2-1144738702
Sinka
2006-04-11 10:58
2006.04.23
Кнопка на TaskBar


2-1144171420
Gear
2006-04-04 21:23
2006.04.23
динамическое создание кнопок на ToolBar


8-1132654098
whatisthematrix3
2005-11-22 13:08
2006.04.23
Хочу добавить музыку в игру





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский