Для классов вовсе не та же фигня, так как класс это не запись, а гораздо больше.
Например посмотрим, что произойдет если просто заменить record на
TSharik = class
R : integer;
P : currency;
end;
и использовать a : TObjectList вместо a:array;
1. record и array
new(sh);
if j <= 10 then a[j]:=@sh; где-то надо помнить последний заполненный и проверять на выход из границ массива
и это только для добавления, а если нужно будет удалять ...
PSharik(a[ j ])^.R := strtoint(s1);
и где-то нужно запомнить что на месте j лежит PSharik
if i = j then PSharik(a[ i ])^.R := strtoint(s1);иначе если вместо PSharik окажется PKubik,
то поля у PKubik в общем случае попортятся и никто этого не заметит.
После использования нужно dispose(a[j]);
2. class и TObjectList
sh := TSharik.Create;
sh.R := strtoint(s1);
a.Add(sh); не надо ничего помнить и проверять, а для удаления есть методы Remove Delete
для приведения типов ничего запоминать не надо
if a[ i ] is TSharik then ( a[ i ] as TSharik ).R := strtoint(s1);
После использования ничего не нужно, достаточно a.OwnObjects := True;
-----------------
imho преимущества использования классов очевидны.
Но и это еще не все - ведь у классов есть наследование и полиморфизм!
Сделаем общего предка
TCommonFig = class
P : currency;
function Massa:Double; virtual; abstract;
function Objem:Double; virtual; abstract;
end;
от него потомков
TSharik = class(TCommonFig)
R : integer;
function Massa:Double; override;
function Objem:Double; override;
end;
TKubik = class(TCommonFig)
A,B,C : integer;
function Massa:Double; override;
function Objem:Double; override;
end;
(Реализацию методов опускаю) И теперь можно например вычислять массу по всему списку
не заботясь о типах:
for i := 0 to a.Count-1 do m := ( a[ i ] as TCommonFig ).Massa;
Другие языки программирования и технологии
(delphi) Я заношу в массив ссылки на записи. Как получить доступ к полям записи?
Доброго времени суток.
Естественно не будет работать. Или воспользуйтесь советом Александра Ильина и объявите массив указателей PSharik, или, если уж так хочется иметь массив указателей, то делайте приведение типов.
type
PSharik = ^Sharik;
var
a : array [1..10] of Pointer;
sh : PSharik;
new(sh);
a[j]:=@sh;
PSharik(a[j])^.R := strtoint(s1);
И абсолютно прав Александр. Используйте TList для таких целей. Это тот же массив нетипизированных указателей. Что касается разных записей, то может имеет смысл посмотреть в сторону записей с вариантами?
Удачи!
Естественно не будет работать. Или воспользуйтесь советом Александра Ильина и объявите массив указателей PSharik, или, если уж так хочется иметь массив указателей, то делайте приведение типов.
type
PSharik = ^Sharik;
var
a : array [1..10] of Pointer;
sh : PSharik;
new(sh);
a[j]:=@sh;
PSharik(a[j])^.R := strtoint(s1);
И абсолютно прав Александр. Используйте TList для таких целей. Это тот же массив нетипизированных указателей. Что касается разных записей, то может имеет смысл посмотреть в сторону записей с вариантами?
Удачи!
Завести тип PSharik = ^Sharik
a: array [ 1.. .10 ] of PSharik
sh: PSharik
Тогда можно будет к a[ j ]^ обращаться по полям
Но для Delphi - это дикий стиль кодинга
Пора бы научиться использовать классы и коллекции, ну или хотя бы списки
a: array [ 1.. .10 ] of PSharik
sh: PSharik
Тогда можно будет к a[ j ]^ обращаться по полям
Но для Delphi - это дикий стиль кодинга
Пора бы научиться использовать классы и коллекции, ну или хотя бы списки
М-м-м. . конечно не знаю целей, но зачем так усложнять то?
Напиши проще:
var
a: array [1..10] of Sharik;
да и пользуйся элементами массива
a[1].R
a[1].Plotnost
Напиши проще:
var
a: array [1..10] of Sharik;
да и пользуйся элементами массива
a[1].R
a[1].Plotnost
Похожие вопросы
- Делфи. Есть указатель типа PChar, он указывает на структуру, как получить доступ к полям этой структуры?
- Доступ к полям другого класса. C# Подробно внутри!
- Как получить доступ к редактированию Реестра на своем компе.
- У меня вопрос к программистам DELPHI.
- uTorent начинаю качать пишет ошибку Процесс не может получить доступ к файлу, так как этот файл занят другим процессом (
- Как получить доступ на диск C?
- Как получить доступ к файловой системе компьютера пользователя зашежшого на мой сайт
- Как разблокировать учетную запись администратора из положения ограниченной учетной записи?
- Задача 4. Комбинированный тип данных – записиСоставить программу, в которой разнотипные данные, обрабатываемые паралл
- Как взломать пароль на учетную запись в висте если эта учетная запись администратора. Можно без загруз диска?