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

Вниз

Перегрузка виртуального метода   Найти похожие ветки 

 
kosha   (2005-10-27 14:54) [0]

Ваше мнение по перегрузке виртуального метода, использование introduce


 
kosha   (2005-10-27 14:56) [1]

Sorry, не introduce, а reintroduce


 
Гаврила ©   (2005-10-27 15:16) [2]

Мое мнение такое: Вопрос не понятен


 
Суслик ©   (2005-10-27 15:49) [3]

аналогичное мнение...


 
Digitman ©   (2005-10-27 16:09) [4]

REintroduce = ПЕРЕпредставить = ВНОВЬ познакомить ..

Цитата из справки :

The reintroduce directive suppresses compiler warnings about hiding previously declared virtual methods. For example,

procedure DoSomething; reintroduce;  // the ancestor class also has a DoSomething method

Use reintroduce when you want to hide an inherited virtual method with a new one.

в то же время

OVERload = ПЕРЕгрузка..

Цитата из справки :

A method can be redeclared using the overload directive. In this case, if the redeclared method has a different parameter signature from its ancestor, it overloads the inherited method without hiding it. Calling the method in a descendant class activates whichever implementation matches the parameters in the call

ы ?


 
kosha   (2005-10-27 16:55) [5]

Уточняю.
В классе TComponent есть метод SetName виртуальный. Если я в классе наследнике ввожу метод SetName я перекрываю TComponent.SetName. Компилятор ругается, а хелп предлагает три варианта решения проблемы: переименовать SetName, использовать reintroduce и еще один вариант.


 
kosha   (2005-10-27 16:56) [6]

Мое мнение что перекрывать метод чужого класса не своего это криво, нужно переименовывать, а reintroduce это только для своих классов


 
Digitman ©   (2005-10-27 17:01) [7]


> В классе TComponent есть метод SetName виртуальный


и тебе предлагается его, если нужно, ПЕРКРЫТЬ (override) !!!!!!!!!!!!!!!!!
а не перегрузить (overload) и не перепредставить (reinytroduce) !!!!!!!!!!!!!!!!


> и еще один вариант.


видать, страшно секретный)


 
kosha   (2005-10-27 17:15) [8]

Кроме синтаксического разбора предложений кто - то еще может высказаться. Третий метод (специально повторно посмотрел) you could specify override to make the derived class" procedure also virtual, and thus allowing inherited calls to still reference the original procedure.


 
icWasya ©   (2005-10-27 17:20) [9]

kosha   (27.10.05 16:55) [5]
>Уточняю.
>В классе TComponent есть метод SetName виртуальный.
>Если я в классе наследнике ввожу метод SetName я перекрываю TComponent.SetName

А что имелось в виду, когда Вы это делали???


 
kosha   (2005-10-27 17:45) [10]

Я меняю TComponent.SetName на TMyClass.SetName которая делает совсем другое действие. Одинаковые имена но разные действия (смысловая нагрузка) в классах. Насколько это проблема при использовании библиотек классов? Не лучше ли TMyClass.SetName назвать TMyClass.MySetName что бы не пересекаться с родительским классом?


 
Lamer@fools.ua ©   (2005-10-27 18:09) [11]

>>kosha   (27.10.05 17:45) [10]

>Не лучше ли TMyClass.SetName назвать TMyClass.MySetName что бы не пересекаться с родительским классом?

Не то, чтобы лучше. Я бы сказал: надо.


 
alex_***   (2005-10-27 18:17) [12]

если с родительским SetName это никак не связано, то лучше назвать по-другому, а если надо подвязать именно к виртуальному методу родителя, то надо inherited вызвать


 
Плохиш ©   (2005-10-27 21:56) [13]


> kosha   (27.10.05 17:45) [10]
> Я меняю TComponent.SetName на TMyClass.SetName которая делает
> совсем другое действие. Одинаковые имена но разные действия
> (смысловая нагрузка) в классах

У метода TComponent.SetName есть вполне определённая задача, для которой он и был создан. Если Вы мешаете ему выполнять свою задачу, то Вы сам себе злобный буратино. Спрашивается, на кой писать программы, которые пойдут прямиком в корзину?


 
Сайбель Алексей ©   (2005-10-28 00:24) [14]

Если тебе нужен именно SetName у своего класса, то перекрывать надо так:
TMyClass = class(TComponent)
 procedure SetName(const NewName: TComponentName); override;
...
procedure TMyClass.SetName(const NewName: TComponentName);
begin
 inherited;//Если нужно
 ...
end;

Только зачем перекрывать?


 
kosha   (2005-10-28 10:37) [15]

Вот и я про тоже, а мне говорят что это не принципиально и так будет работать. Спасибо за разъяснения.



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

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

Наверх




Память: 0.48 MB
Время: 0.068 c
2-1130746379
syte_ser78
2005-10-31 11:12
2005.11.20
как подключить dll?


4-1127114536
Руслан
2005-09-19 11:22
2005.11.20
А можно ли программно из Windows


2-1130756029
Spectre_s
2005-10-31 13:53
2005.11.20
Параметры


2-1130499208
Yus
2005-10-28 15:33
2005.11.20
Работа с классами


2-1130757080
kami
2005-10-31 14:11
2005.11.20
Службы: узнать "Вход от имени"





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