Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

override [D7, WinXP]


tigra ©   (2006-04-05 15:59:00) 

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


MBo   (2006-04-06 14:27:00) [1]

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


Amoeba   (2006-04-06 14:23:00) [2]


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

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


MBo   (2006-04-06 13:03:00) [3]

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

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


tesseract   (2006-04-06 11:13:00) [4]

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

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

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

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


Amoeba   (2006-04-06 10:52:00) [5]


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


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


Джо   (2006-04-05 20:10:00) [6]

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

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

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

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


Anatoly Podgoretsky   (2006-04-05 20:06:00) [7]

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


TUser   (2006-04-05 19:30:00) [8]

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

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


Jeer   (2006-04-05 17:57:00) [9]

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

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


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

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

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


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

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


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

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо