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

Вниз

Перегрузка конструкторов   Найти похожие ветки 

 
Индеец ©   (2009-04-20 09:03) [0]

Здравствуйте, вот есть такой класс:
T1=class(TPersistent)
public
constructor create;virtual;
.........

А хотелось бы в нем реализовать 2 конструктора: что- то вроде
T1=class(TPersistent)
public
constructor create;virtual;
constructor create (sender:T1);.....
.........

Вот вопрос как правильно объявить конструктор ?


 
Б   (2009-04-20 09:06) [1]

Override;


 
Индеец ©   (2009-04-20 09:08) [2]

пробовал
T1=class(TPersistent)
public
constructor create;virtual;
constructor create (sender:T1);override;
.........

E2170 Cannot override a non-virtual method


 
Сергей М. ©   (2009-04-20 09:16) [3]

;virtual; overload;

override - это директива перекрытия твоего виртуального метода в наследниках твоего класса.


 
Индеец ©   (2009-04-20 09:23) [4]


> ;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:24) [5]

Получилось так:
T1=class(TPersistent)
public
   constructor create;overload;virtual;
   constructor create (sender:Tlxtclass);overload;virtual;
........


 
Palladin ©   (2009-04-20 11:51) [6]

reintroduce


 
Б   (2009-04-20 12:37) [7]


> Б   (20.04.09 09:06) [1]
> Override;


Перепутал с директивой перезагрузки: overload;


 
Плохиш ©   (2009-04-20 15:05) [8]

Хм, а в чём смысл виртуальности у конструктора?


 
Ega23 ©   (2009-04-20 15:31) [9]


> Хм, а в чём смысл виртуальности у конструктора?


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)


 
Palladin ©   (2009-04-20 16:15) [10]


> Плохиш ©   (20.04.09 15:05) [8]

хо хо... на них, виртуальных конструкторах, строится вся VCL... в купе с понятием того что класс сам по себе уже объект


 
Palladin ©   (2009-04-20 16:16) [11]

порой у меня возникает чувство, что не VCL писали на Делфи, а Делфи писали для VCL :)


 
Плохиш ©   (2009-04-20 16:16) [12]


> Ega23 ©   (20.04.09 15:31) [9]

Мне реализация из CreateForm симпатичнее :-)


 
Плохиш ©   (2009-04-20 16:24) [13]


> Palladin ©   (20.04.09 16:15) [10]

Хм, действительно, у компонентов конструкторы виртуальные :-)


 
Ega23 ©   (2009-04-20 16:30) [14]


> Хм, действительно, у компонентов конструкторы виртуальные
> :-)


Ну правильно, а как ты иначе создавать из списка будешь?



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

Текущий архив: 2009.05.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
15-1238445004
Юрий
2009-03-31 00:30
2009.05.31
С днем рождения ! 31 марта 2009 вторник


2-1239808180
ksevelyar
2009-04-15 19:09
2009.05.31
Погрешность метода Рунге-Кутта


11-1201430310
=BuckLr=
2008-01-27 13:38
2009.05.31
Скорректировать описание RE_LineSpacing и RE_SpacingRule


9-1179831261
Jkot
2007-05-22 14:54
2009.05.31
Луч и треугольник.


15-1238431132
Хибл Герзмаев
2009-03-30 20:38
2009.05.31
Патч MS 08-067