![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как создать свой конструктор с другими параметрами? [D6, WinXP]
MadLesS © (2005-03-03 21:06:00)Я создаю класс на основе TComponent и переписываю у него конструктор:
constructor Create(AOwner: TComponent; MaskName, SpriteName, CoordName: String); override
Но цомпилятор матерится, типа у него параметры отличаются.
Я тогда вместо override нарисовал overload, а он мне, буржуй иностранный, говорит, что метод предка будет скрыт, хоть и компилюкает. Возможно ли этого вообще избежать?
Юрий Зотов (2005-03-04 01:34:00) [21]> jack128 © (04.03.05 00:43) [11]
> толк может и есть, если есть какое то чаще всего используемое
> значение параметра I.
Например, задаваемое в виртуальном классовом методе. Еще больше виртуальности получается, однако...
:о)
Да ведь и пример конструктора с Integer - это всего лишь пример, на деле же можно делать что угодно. Например, растроить или расчетверить или рас_N_рить цепочку - и все одним и тем же способом. И все, вроде как, вполне виртуально.
Интересные возможности здесь открываются, по-моему.
jack128 (2005-03-04 00:43:00) [22]А толку от неё?? Мы ведь не можем в дезин тайм создать форму с I отличным от нуля. Ну то есть толк может и есть, если есть какое то чаще всего используемое значение параметра I..
Юрий Зотов (2005-03-03 23:40:00) [23]> MadLesS © (03.03.05 21:06)
> вместо override нарисовал overload, а он мне, буржуй
> иностранный, говорит, что метод предка будет скрыт,
> хоть и компилюкает. Возможно ли этого вообще избежать?
constructor Create(...); reintroduce; overload;
reintroduce - посмотрите в справке.
> jack128 © (03.03.05 21:54) [9]
> естественнно о виртуальности (в частности о использовании
> в дезин тайм) можно забыть
Вот такой код, по крайней мере, спокойно компилится. В работе не проверял, но почему-то надеюсь, что и работать будет.
:о)
type
TForm1 = class(TForm)
public
constructor Create(AOwner: TComponent); overload; override;
constructor Create(I: integer); reintroduce; overload; virtual;
end;
TForm2 = class(TForm1)
public
constructor Create(I: integer); override;
end;
constructor TForm1.Create(I: integer);
begin
inherited Create(Application)
end;
constructor TForm1.Create(AOwner: TComponent);
begin
Create(0)
end;
constructor TForm2.Create(I: integer);
begin
inherited
end;
Получаем новую виртуальную цепочку, как ответвление от прежней?
:о)
jack128 (2005-03-03 21:54:00) [24]constructor Create(AOwner: TComponent; MaskName, SpriteName, CoordName: String); reintroduce; естественнно о виртуальности(в частности о использовании в дезин тайм) можно забыть ;-)
Anatoly Podgoretsky (2005-03-03 21:39:00) [25]Как мне кажется, для перегрузки и для виртуальности оба модификатора должны использоваться одновременно, но это требует проверки.
Anatoly Podgoretsky (2005-03-03 21:38:00) [26]Более красиво, когда разные имена, строго отвечающие за особенности конструкторов.
MadLesS (2005-03-03 21:30:00) [27]Ну пасиба за разъяснения. Просто я хотел, чтобы всё было красиво что-ли. Но по вашим ответам ясно, что не судьба. Будем знать
Anatoly Podgoretsky (2005-03-03 21:25:00) [28]А зачем тебе именно Сreate?
Почему не устраивает MyСreate?
По поводу хотелки 0 вам шашечки или ехать?
MadLesS (2005-03-03 21:22:00) [29]Извините за беспросветность. Вы имеете ввиду задать ему Имя, отличное от Create? Если так, то я хочу именно чтобы было Create. Такое реально?
Anatoly Podgoretsky (2005-03-03 21:18:00) [30]А так
constructor Имя(формальные параметры); модификаторы;
MadLesS (2005-03-03 21:16:00) [31]Это в каком смысле с обычным? А если я не хочу разых имён. Возможно ли переопределить метод предка изменив его параметры и чтобы не появлялись варнинги?
Anatoly Podgoretsky (2005-03-03 21:08:00) [32]Никакого различия с обычным, должно быть только разное имя