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

Вниз

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

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

Наверх




Память: 0.5 MB
Время: 0.033 c
11-1109298582
Lars
2005-02-25 05:29
2005.11.20
A Perfect use for KOL?? CGI web server?


1-1130426986
Katya210
2005-10-27 19:29
2005.11.20
Как в WebBrousere


14-1130798937
-=XxX=-
2005-11-01 01:48
2005.11.20
Шотландская волынка


14-1130330554
Вопрошающий
2005-10-26 16:42
2005.11.20
задачка


1-1130394716
DEMs
2005-10-27 10:31
2005.11.20
Выгрузка в Excel memo полей