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

Вниз

Имитация множественного наследования   Найти похожие ветки 

 
Ш-К   (2004-05-07 10:27) [0]

Есть два класса:

TItem = class;
...
end;

TList = class(TItem);
FItems: array of TItem;
...
end;

Классы описывают работу с деревьями, но дело не в деревьях.
Дело вот в чем. Создаю потомков от классов.

TMyItem = class(TItem);
...
end;

TMyList = class(TList);
...
end;

TMyList ничего не знает о TMyItem, а мне надо чтобы TMyList мог наследовать функциональность и TMyItem, как это реализовано у его предка TList.

Другими словами, как на конкретном примере реализовать конструкцию:

TMyList = class(TList, TMyItem);


 
Skier ©   (2004-05-07 10:30) [1]


> Имитация множественного наследования

Имитация множественного наследования в Object Pascal возможна только через использование интерфейсов.


 
ASMiD ©   (2004-05-07 10:31) [2]

Либо я чегото недопонял, либо есть желание заставить дерево срастаться своей кроной?


 
Ш-К   (2004-05-07 10:32) [3]

Ну, я то и прошу показать на примере.


 
Skier ©   (2004-05-07 10:36) [4]

>Ш-К   (07.05.04 10:27)  
TMYItem - Это узел дерева
TMyList - Это список узлов верхнего уровня.
Так ?


 
Ш-К   (2004-05-07 10:46) [5]

Есть связка классов TItem-TList. И я хочу "наследоваться" от этой связки.

> TMYItem - Это узел дерева
> TMyList - Это список узлов верхнего уровня.
> Так ?

Именно так.


 
Skier ©   (2004-05-07 10:52) [6]

>Ш-К   (07.05.04 10:46) [5]

> Именно так.

А теперь такой вопрос (прошу над ним хорошо подумать) : зачем для решения такой задачи множественное наследование ?


 
Ш-К   (2004-05-07 11:01) [7]


> зачем для решения такой задачи множественное наследование

Я не знаю, как ещё :(
Если можно обойтись, то буду рад.
Это для моей задачи с деревьями.

А в общем, хотелось бы хоть раз увидеть, как с помощью интерфейсов сделать сабж.


 
Ш-К   (2004-05-07 11:06) [8]

Да, в дополнение к [5]
TMyList не просто список, у него еще должны быть все св-ва TMYItem.


 
Skier ©   (2004-05-07 11:09) [9]


> TMyList не просто список, у него еще должны быть все св-ва
> TMYItem.


смотри реализацию TObjectList. И делай по аналогии...


> А в общем, хотелось бы хоть раз увидеть, как с помощью интерфейсов
> сделать сабж.

интерфейсы тут совершенно не нужны...


 
Goida ©   (2004-05-07 11:12) [10]

У тебя есть TItem. У тебя должен быть TList, который должен быть оболочкой для TItem, а не наследоваться от него. У тебя эти классы делают совершенно разную работу.


 
Ш-К   (2004-05-07 11:24) [11]

Наверно, внесло путаницу названия базовых классов. Ничего общего с Classes.TList

Прошу прощения, с деревьями тема закрыта. Это не деревья. Всё.
Сделал TMyItem = class(TList)

Skier ©   (07.05.04 10:30) [1]

> > Имитация множественного наследования
>
> Имитация множественного наследования в Object Pascal возможна
> только через использование интерфейсов.


Skier ©   (07.05.04 11:09) [9]

> > А в общем, хотелось бы хоть раз увидеть, как с помощью
> интерфейсов
> > сделать сабж.
>
> интерфейсы тут совершенно не нужны...


 
Goida ©   (2004-05-07 11:35) [12]


> Ш-К  


> Сделал TMyItem = class(TList)

Ты не правильно сделал... Хотя хозяин - барин...


 
malkolinge ©   (2004-05-07 12:01) [13]


> > Имитация множественного наследования


TbaseClass1=class
procedure a
end;

TbaseClass2=class
procedure b
end;

IbaseClass2 = interface
procedure b
end

TMyClass = class(TbaseClass1, IBaseClass2)
property BaseClass2:TbaseClass2 implements IBaseClass2;
end;



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

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

Наверх




Память: 0.49 MB
Время: 0.053 c
6-1080884762
vasil
2004-04-02 09:46
2004.05.23
Использование Компонента WebBrowser


9-1074195994
Zak3D[@Tm]
2004-01-15 22:46
2004.05.23
Опять fps...


1-1084357491
PAN2009
2004-05-12 14:24
2004.05.23
код символа


9-1074687307
Shopot
2004-01-21 15:15
2004.05.23
Direct3D в Delphi.


6-1081316049
ashnurov
2004-04-07 09:34
2004.05.23
WinInet