Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
Ш-К   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.033 c
7-1082362957
fantomas
2004-04-19 12:22
2004.05.23
Работа с Com портом


1-1083824616
Tex
2004-05-06 10:23
2004.05.23
как сконвертить bmp в jpg


4-1081258818
Prov
2004-04-06 17:40
2004.05.23
послать нажатие клавиши окну приложения


1-1084206117
Nicolas1985
2004-05-10 20:21
2004.05.23
Разрешение экрана


6-1081180609
OSokin
2004-04-05 19:56
2004.05.23
WinPopup





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский