Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.008 c
15-1238431132
Хибл Герзмаев
2009-03-30 20:38
2009.05.31
Патч MS 08-067


15-1234785296
Василий Жогарев
2009-02-16 14:54
2009.05.31
MSQ SQL Server 2005


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


15-1237875001
Урсулапов_
2009-03-24 09:10
2009.05.31
Программа, которая распознает тип файла без расширения


15-1237982524
pavel_guzhanov
2009-03-25 15:02
2009.05.31
Вирус в банкоматах




   Наверх