Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-3629
Axel
2002-08-05 12:26
2002.09.02
Galileo, Delphi for .NET


1-3429
^Sanya
2002-08-22 00:15
2002.09.02
: QuickLaunch


3-3258
Xelar
2002-08-12 13:55
2002.09.02
Текущая строка в DBGrid


1-3467
vitnt2000
2002-08-20 07:21
2002.09.02
Как программно заставить выпасть DateTimePicker?


7-3645
Alexander
2002-06-21 02:28
2002.09.02
Как мне применить темы Windows XP в окне, которое создано в файле





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