![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по ООП
Константинов © (2004-09-18 22:36:00)Допустим, есть базовый класс:
TBaseClass = class ( TPersistent )
private
FFont : TFont;
FPen : TPen;
public
constructor Create;
...
end;
...
constructor TBaseClass.Create;
begin
FFont := TFont.Create;
FPen := TPen.Create;
end;
и есть класс потомок:
TMyClass class ( TBaseClass )
published
property Font;
end;
Вопрос: Будет ли создан объект Pen в классе TMyClass?
и еще...
если объявить в TBaseClass свойство-список
private
FList : TList;
public
property Items[Index :integer] : TMyType...
и методы, позволяющее редактировать список
public
function Add ( const Value : TMyType ) : integer;
procedure Delete ( Index : integer );
procedure Clear;
...
function Add ( const Value : TMyType ) : integer;
var P : ^TMyType;
begin
GetMem(P,SizeOf(P^);
P^ := Value;
FList.Add(P);
end;
можно ли импользовать это свойство в потомках, но для
хранения данных другого типа, отличного от MyType?
если да, то как реализовать?
Заранее спасибо.
VMcL (2004-09-20 11:43:00) [1]>> basken (20.09.04 11:12) [3]
> TObjectList хранит объекты, а TList указатели на объекты.
Нет. TList хранит указатели типа Pointer, а TObjectList - указатели типа TObject.
basken (2004-09-20 11:12:00) [2]
> Вопрос: Будет ли создан объект Pen в классе TMyClass?
Будет...
> можно ли импользовать это свойство в потомках, но для
> хранения данных другого типа, отличного от MyType?
> если да, то как реализовать?
Можно. см [2].
Мне, кажется, было бы лучше использовать TObjectList вместо TList в данной ситуации. Та как TObjectList хранит объекты, а TList указатели на объекты.
DiamondShark (2004-09-18 23:31:00) [3]
> Вопрос: Будет ли создан объект Pen в классе TMyClass?
Будет, если:
в классе TMyClass конструктор не перекрыт или
в перекрытом конструкторе TMyClass вызван конструктор предка.
> можно ли импользовать это свойство в потомках, но для
> хранения данных другого типа, отличного от MyType?
> если да, то как реализовать?
Можно. Переопределить свойство. Но помнить, что для переопределённых свойств нет полиморфизма.
Если этот самый "другой тип" -- родственник первого, то имеет смысл сделать свойство базового типа, а методы доступа к свойству виртуальными.
Sergey_Masloff (2004-09-18 22:44:00) [4]А написать все это в среде и проверить? Заратустра не позволяет?
А вот это
function Add ( const Value : TMyType ) : integer;
var P : ^TMyType;
begin
GetMem(P,SizeOf(P^);
P^ := Value;
FList.Add(P);
end;
Вообще фигня если TMyType = class...