Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-46334
Mikel Fryg
2002-04-02 22:25
2002.04.15
Как сделать форму активной?


1-46327
Yuraz
2002-04-01 17:32
2002.04.15
Мастера, не могу правильно выйти из потока, делаю:


1-46389
Kate
2002-04-02 12:30
2002.04.15
Поиск файлов


3-46282
Art1
2002-03-22 16:16
2002.04.15
Помогите с изменением полей, плииииз.


14-46506
Alx2
2002-03-07 10:04
2002.04.15
Поздравляю дам, нашедших себя на поприще программинга, с 8 Марта!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский