Форум: "Основная";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
ВнизRTTI при использовании динамических объектов Найти похожие ветки
← →
Death Soul (2002-04-01 22:22) [0]Есть след. стуктуры:
Type
PShape = ^TShape;
TShape = Class (TObject)
...
End;
PRectangle = ^TRectangle;
TRectangle = Class (TShape)
...
End;
PTriangle = ^TTriangle;
TTriangle = Class (TShape)
...
End;
Далее имеется контейнер указателей
List : TList;
В него заносим через указатель P : POINTER различные элементы
Rectangle : PRectangle и Triangle : PTriangle. Потом через базовый указатель Shape : PShape пытаемся их растипизироать и "вытащить".
ВОПРОС :
КАК БЕЗ ИСПОЛЬЗОВАНИЯ P : POINTER ПЕРЕПРИСВОИТЬ УКАЗАТЕЛИ И ПОЛУЧИТЬ ДОСТУП К ПОЛЯМ И МЕТОДАМ ОБЪЕКТА
Rectangle := Shape
или
Triangle := Shape
ГДЕ ЗАРАНЕЕ ИЗВЕСТНО, ЧТО Shape СОДЕРЖИТ УКАЗАТЕЛЬ НА Rectangle или Triangle;
Заранее СПАСИБО !!!
← →
vuk (2002-04-01 22:45) [1]А зачем использовать конструкцию типа PShape = ^TShape;? Для "старых" объектных типов это еще подходит, но для классов переменная и так будет указателем, поэтому все это лишнее. В данном случае все делается гораздо проще.
var
List : TList; //можно TObjectList
List := TList.Create;
List.Add( TRectangle.Create(...));
...
List.Add( TTriangle.Create(...));
пример перебора (с использованием проверки типа через IS)
for i := 0 to List.Count - 1 do
if TObject(List[i]) is TRectangle then ...
else
if TObject(List[i]) is TTriangle then ...;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.005 c