![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ООП [D4, WinME]
МЯУ © (2004-09-10 22:10:00)Привет! У меня маленький вопросец по ООП. Зачем нужна директива reintroduce? Я пробовал и так и сяк, в любом случае при перекрывании абстрактного метода, с директивой ли или без, прога выдает Abstract Error. В хелпе написано что, мол, reintroduce нужен чтобы компилер не выдавал сообщение о перекрытии абстрактного метода. неужели функция этой директивы ограничивается затыканием компилятора?
GuAV (2004-09-11 19:39:00) [1]
> Абстрактный метод ОБЯЗАТЕЛЬНО должен быть виртуальным.
... или динамическим.
Abstract methods must be declared with the directive abstract after virtual or dynamiс
> oveload и virtual
over rideи virtual вместе не используются.
GuAV (2004-09-11 19:33:00) [2]iZEN © (11.09.04 7:31) [4][Ответить]
Только что тест сделал... такое компилится:
type
TCoolClass = class
constructor Create; reintroduce; overload; virtual;
deprecated; platform; library; register; abstract;
end;
Alekc (2004-09-11 18:48:00) [3]oveload и virtual - насколько я помню, они вместе не используются...
iZEN (2004-09-11 07:31:00) [4]Мне как-то пришлось использовать аж ТРИ квалификатора вместе, чтобы сделать переопределение перегруженного виртуального метода! :)))
reinroduce; overload; virtual; //попробуй разберись, в каком порядке правильно. ;)
МЯУ (2004-09-10 22:42:00) [5]блин... и правда! :)
Defunct (2004-09-10 22:39:00) [6]> Зачем нужна директива reintroduce?
> В хелпе написано что, мол, reintroduce нужен чтобы компилер не выдавал сообщение о перекрытии абстрактного метода.
Вот что написано в хелпе:
The reintroduce directive suppresses compiler warnings about hiding previously declared virtual methods.
Что означает, Reintroduce пресекает предупреждение компилятора, при жестком перекрытии одноименного виртуального метода предка.
Как видите, ни слова об абстрактых методах, говорится только о перекрытии виртуального метода.
> Я пробовал и так и сяк, в любом случае при перекрывании абстрактного метода, с директивой ли или без, прога выдает Abstract Error
Так пробовали:
TMyAbstractClass = class
Procedure DoSomething;Virtual;Abstract;
..
End;
TMyClass = class(TMyAbstractClass)
Procedure DoSomething;Override;
End;
Абстрактный метод ОБЯЗАТЕЛЬНО должен быть виртуальным.
> неужели функция этой директивы ограничивается затыканием компилятора?
Именно. Reintroduce по большому счету почти не используется (только в больших иерархиях, где требуется коренным образом изменить характер работы метода)
Palladin (2004-09-10 22:33:00) [7]где в хелпе написано про перекрытие именно абстрактных? виртуальных, но не абстрактных...