Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.23;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
2-1144552946
Klopan
2006-04-09 07:22
2006.04.23
ListView


15-1143909658
Рамиль
2006-04-01 20:40
2006.04.23
А вы говорите первое апреля:-)


2-1144513418
FA
2006-04-08 20:23
2006.04.23
Динамические массивы в параметрах


3-1141045807
toha
2006-02-27 16:10
2006.04.23
Помогите новичку. Работа с БД в Делфи


6-1136967701
sain
2006-01-11 11:21
2006.04.23
Работа с сетью