Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Вниз

ООП   Найти похожие ветки 

 
МЯУ   (2004-09-10 22:10) [0]

Привет! У меня маленький вопросец по ООП. Зачем нужна директива reintroduce? Я пробовал и так и сяк, в любом случае при перекрывании абстрактного метода, с директивой ли или без, прога выдает Abstract Error. В хелпе написано что, мол, reintroduce нужен чтобы компилер не выдавал сообщение о перекрытии абстрактного метода. неужели функция этой директивы ограничивается затыканием компилятора?


 
Palladin ©   (2004-09-10 22:33) [1]

где в хелпе написано про перекрытие именно абстрактных? виртуальных, но не абстрактных...


 
Defunct ©   (2004-09-10 22:39) [2]

> Зачем нужна директива 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 по большому счету почти не используется (только в больших иерархиях, где требуется коренным образом изменить характер работы метода)


 
МЯУ   (2004-09-10 22:42) [3]

блин... и правда! :)


 
iZEN ©   (2004-09-11 07:31) [4]

Мне как-то пришлось использовать аж ТРИ квалификатора вместе, чтобы сделать переопределение перегруженного виртуального метода! :)))
reinroduce; overload; virtual; //попробуй разберись, в каком порядке правильно. ;)


 
Alekc   (2004-09-11 18:48) [5]

oveload и virtual - насколько я помню, они вместе не используются...


 
GuAV ©   (2004-09-11 19:33) [6]

iZEN ©   (11.09.04 7:31) [4][Ответить]

Только что тест сделал... такое компилится:
type
 TCoolClass = class
   constructor Create; reintroduce; overload; virtual;
     deprecated; platform; library; register; abstract;
 end;


 
GuAV ©   (2004-09-11 19:39) [7]


> Абстрактный метод ОБЯЗАТЕЛЬНО должен быть виртуальным.

... или динамическим.

Abstract methods must be declared with the directive abstract after virtual or dynamiс


> oveload и virtual

override и virtual вместе не используются.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.034 c
14-1094235698
Piter
2004-09-03 22:21
2004.09.26
Где в IE можно указать пароль от прокси сервера?!


1-1095067054
kukuikar
2004-09-13 13:17
2004.09.26
Как перехватить клики в IE?


3-1093628825
Vemer
2004-08-27 21:47
2004.09.26
Как правильно отцепить Master - Dataset?


3-1093856343
Aleksandr.
2004-08-30 12:59
2004.09.26
Что означает свойство Locale у TDataSet?


9-1085198433
lokid7
2004-05-22 08:00
2004.09.26
Книги по созданию игр в электронном виде





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