Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];
ВнизИспользование типа record Найти похожие ветки
← →
Vlad2 (2002-08-22 06:53) [0]Здравствуйте !
Подскажите, пожалуйста, кто знает, как создать объект типа record. Что-то не нашел ни в Help, ни в faq.
Необходимо работать с массивом объектов типа record, но как его
создать ? И как уничтожить ?
← →
MBo (2002-08-22 07:00) [1]Record- не объект
type myrec=record
a:integer;
b:integer
end;
var ar:array[1..10] of myrec;
если надо динамически создавать:
type precarray=^recarray;
recarray=array[1..10] of myrec;
var p:precarray;
new(p);
p^[1].a:=3;
delete(p);
← →
gek (2002-08-22 07:01) [2]type
TRecRaport = class(TObject)
private
{ Private declarations }
public
{ Public declarations }
s:string;
k:word;
z:real;
..........
a:char;
end;
var
Ra:TRecRaport;
begin
Ra:=TRecRaport.Create;
.............
..............
Ra.Free;
← →
Vlad2 (2002-08-22 07:13) [3]to MBo
О! то, что надо.
Сейчас проверю работу с динамическим массивом:
// from Mbo
type precarray=^recarray;
recarray=array[1..10] of myrec;
// заменю на recarray=array of myrec;
// т.к. размер массива неизвестен
var p:precarray;
new(p);
p^[1].a:=3;
delete(p);
//
Значит, я невнимательно читал Help. Спасибо.
← →
Vlad2 (2002-08-22 07:18) [4]Вдогонку to Mbo:
А почему Вы пишете "Record- не объект" ?
Я так понимаю, что есть объект типа class, объект типа Integer,
объект типа record, объект типа Interface. Существуют лишь
различия в правилах работы с ними и использовании памяти. Или нет ?
← →
MBo (2002-08-22 07:24) [5]>Vlad2
>есть объект типа class, объект типа Integer,
в житейском смысле все можно назвать объектами, но в Object Pascal объект - специальный тип, напоминающий записи с методами (процедурами и функциями), скрытием полей, и вся работа с ним ведется только с помощью указательной технологии (обычно объектом назвают экземпляр класса, он является указателем, но ^-синтаксис к нему не нужно применять, это делается автоматически).
Про это нужно, конечно, читать.
>recarray=array[1..10] of myrec;
>// заменю на recarray=array of myrec;
>// т.к. размер массива неизвестен
какая стоит задача?
обрати внимание на списки (TList)
← →
Vlad2 (2002-08-22 07:33) [6]to Mbo
У меня мания - использовать макс. простые структуры.
TList содержит методы, которые мне не нужны.
Необходима конструкция (не говорю "объект", следуя Вашему разъяснению), которая только хранит данные, и доступ с элементу хранилища по индексу. Насколько я понял, при работе с record
опасность только в некорректных индексах.
← →
MBo (2002-08-22 07:42) [7]динамическому массиву надо явно выделять память вызовом SetLength, можно обойтись и без ^
var ar:array of myrec;
setlength(ar,10);
ar[0].a:=3;
← →
Vlad2 (2002-08-22 07:50) [8]to Mbo
Отлично !
Надеюсь, и я Вам "когда нибудь пригожусь" (из сказки). Спасибо.
← →
Digitman (2002-08-22 09:00) [9]>Vlad2
> У меня мания - использовать макс. простые структуры
Если ты подключил (осознанно, по каким-либо иным причинам) модуль classes.pas, нет смысла отказываться от удовольствия воспользоваться тем же TList, ибо неиспользуемый тобой код его все равно "мертвым грузом" тем или иным образом будет включен в АП твоего процесса как неотъемлемый фрагмент подключенного тобой модуля
← →
Vlad2 (2002-08-22 09:10) [10]to Digitman
Точно. Всё равно, где-то этот модуль будет будет подключён в
мой Application. Тогда вопрос: верно ли, что использование record
даст выигрыш в скорости обработки (record contra TList) ?
← →
Digitman (2002-08-22 09:18) [11]>Vlad2
Не думаю, что выигрыш будет ощутимым. Речь о сколь-либо заметном выигрыше может идти лишь тогда, когда размера твоего массива записей не планируется динамически перераспределять в run-time (т.е. распределяется однократно)
← →
Anatoly Podgoretsky (2002-08-22 09:23) [12]Если статический массив то то сотню миллисекунд на миллион обращений, по сравнению с динамическим или TList.
Почему бы не измерить время на большом цикле.
← →
Vlad2 (2002-08-22 09:32) [13]to Digitman
Так и есть, т.е. "Речь о сколь-либо заметном выигрыше может идти лишь тогда, ...", - размер динамического массива по жизни меняется, но не часто.
to Anatoly Podgoretsky
Прекрасная мысль, пратика - критерий истины.
Одноко, кажется, с большой уверенностью можно сказать, что TList - более правильное решение.
← →
Dmitry W. Polschanoff (2002-08-22 10:43) [14]To MBo
> динамическому массиву надо явно выделять память вызовом
>
> SetLength, можно обойтись и без ^
> var ar:array of myrec;
> setlength(ar,10);
>ar[0].a:=3;
Реализация динамических массивов в делфи оставляет желать лучшего. Причем начиная во всех версиях, в которых она есть.
Ошибка настолько серьезная, что запросто можно получить
"скозящий" GPF. И режим Debug"а не поможет - показывает вываливание в различных (заведомо правильных) точках программы.
← →
Vlad2 (2002-08-22 10:55) [15]to Dmitry W. Polschanoff
Разъясните, пожалуйста, что есть
>"скозящий" GPF
(global pointer failure ?)
← →
Dick (2002-08-22 21:28) [16]To Vlad2 >> TList удобно использовать когда требуется вставить элемент в список.
to Dmitry W. Polschanoff -
Ни разу не получал GPF(To Vlad2 >> General protection failure) при работе с динамическим массивом.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c