Форум: "Начинающим";
Текущий архив: 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