![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перегрузка конструкторов
Индеец © (2009-04-20 09:03:00)Здравствуйте, вот есть такой класс:
T1=class(TPersistent)
public
constructor create;virtual;
.........
А хотелось бы в нем реализовать 2 конструктора: что- то вроде
T1=class(TPersistent)
public
constructor create;virtual;
constructor create (sender:T1);.....
.........
Вот вопрос как правильно объявить конструктор ?
Ega23 (2009-04-20 16:30:00) [1]
> Хм, действительно, у компонентов конструкторы виртуальные
> :-)
Ну правильно, а как ты иначе создавать из списка будешь?
Плохиш (2009-04-20 16:24:00) [2]
> Palladin © (20.04.09 16:15) [10]
Хм, действительно, у компонентов конструкторы виртуальные :-)
Palladin (2009-04-20 16:16:00) [3]порой у меня возникает чувство, что не VCL писали на Делфи, а Делфи писали для VCL :)
Плохиш (2009-04-20 16:16:00) [4]
> Ega23 © (20.04.09 15:31) [9]
Мне реализация из CreateForm симпатичнее :-)
Palladin (2009-04-20 16:15:00) [5]
> Плохиш © (20.04.09 15:05) [8]
хо хо... на них, виртуальных конструкторах, строится вся VCL... в купе с понятием того что класс сам по себе уже объект
Ega23 (2009-04-20 15:31:00) [6]
> Хм, а в чём смысл виртуальности у конструктора?
TBaseObject = class (TObject)
public
constructor Create; virtual;
end;
TFirstObject = class (TBaseObject);
TSecondObject = class (TBaseObject);
TBaseObjectClass = class of TBaseObject;
function CreateObject(ObjectClass : TBaseObjectClass) : TBaseObject;
begin
Result := ObjectClass.Create;
end;
Теперь перекрываешь конструкторы TFirstObject и TSecondObject - и они отрабатывают при вызове CreateObject(TFirstObject) или CreateObject(TSecondObject)
Плохиш (2009-04-20 15:05:00) [7]Хм, а в чём смысл виртуальности у конструктора?
Б (2009-04-20 12:37:00) [8]
> Б (20.04.09 09:06) [1]
> Override;
Перепутал с директивой перезагрузки: overload;
Palladin (2009-04-20 11:51:00) [9]reintroduce
Индеец (2009-04-20 09:24:00) [10]Получилось так:
T1=class(TPersistent)
public
constructor create;overload;virtual;
constructor create (sender:Tlxtclass);overload;virtual;
........
Индеец (2009-04-20 09:23:00) [11]
> ;virtual; overload;
>
> override - это директива перекрытия твоего виртуального
> метода в наследниках твоего класса.
Написал так:
T1=class(TPersistent)
public
constructor create;virtual;
constructor create (sender:T1);virtual;overload;
...........
E2254 Overloaded procedure 'create' must be marked with the 'overload' directive
Сергей М. (2009-04-20 09:16:00) [12];virtual; overload;
override - это директива перекрытия твоего виртуального метода в наследникахтвоего класса.
Индеец (2009-04-20 09:08:00) [13]пробовал
T1=class(TPersistent)
public
constructor create;virtual;
constructor create (sender:T1);override;
.........
E2170 Cannot override a non-virtual method
Б (2009-04-20 09:06:00) [14]Override;