Конструктор Динамического массива |
Вверх Предыдущий Следующий |
В версии 3.0 Free Pascal, тип динамические массивы имеют конструктор. Это обеспечивает компилятор из внутреннего устройсва динамических массивов. До версии 2.6.4, был единственный способ инициализировать динамические массивы следующим образом: Type TIntegerArray = Array of Integer;
var A : TIntegerArray; begin SetLength(A,3); A[0]:=1; A[1]:=2; A[3]:=3; Writeln(Length(A)); end. В версии 3.0 Free Pascal, динамический массив можно инициализировать с помощью конструктороподобного синтаксиса. Вызывается конструктор Create, и принимает в качестве параметров значения, тип которых соответствует типу элементов массива, а количество - будет определять размерность массива. Это означает, что приведённая выше инициализация может быть сделана, так: Type TIntegerArray = Array of Integer;
var A : TIntegerArray; begin A:=TIntegerArray.Create(1,2,3); Writeln(Length(A)); end. Обратите внимание, что это не будет работать для динамических массивов, для которых не был создан свой тип. То есть, следующий код работать не будет: var A : Array of Integer; begin A:=Array of Integer.Create(1,2,3); Writeln(Length(A)); end. Этот подход также работает рекурсивно, для многомерных массивов: Type TIntegerArray = Array of Integer; TIntegerArrayArray = Array of TIntegerArray;
var A : TIntegerArrayArray; begin A:=TIntegerArrayArray.Create(TIntegerArray.Create(1,2,3), TIntegerArray.Create(4,5,6), TIntegerArray.Create(7,8,9)); Writeln(’Length ’,length(A)); end. Однако, поскольку он является конструктором (его код выполняется во время выполнения) не представляется возможным использовать его в синтаксисе инициализации переменной. То есть, следующий код работать не будет: Type TIntegerArray = Array of Integer;
var A : TIntegerArray = TIntegerArray.Create(1,2,3); begin Writeln(’Length ’,length(A)); end. |