Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перегрузка конструкторов


Индеец ©   (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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо