Инициализация массивов объектов указателя

При инициализации массива объектов указателя MATLAB® заполняет пустые элементы массива с объектом по умолчанию. Создать объект по умолчанию, MATLAB:

  • Вызывает конструктора класса однажды, чтобы получить объект

  • Создает уникальные дескрипторы для каждого элемента в массиве

  • Копирует значения свойств с созданного объекта по умолчанию, не вызывая конструктора снова.

Класс InitHandleArray иллюстрирует это поведение.

classdef InitHandleArray < handle
   properties
      RandNumb
   end
   methods
      function obj = InitHandleArray
         obj.RandNumb = randi(100);
      end
   end
end

Свойство RandNumb содержит случайное число, которое присваивает конструктор InitHandleArray.

Рассмотрите то, что происходит, когда MATLAB инициализирует массив, созданный путем присвоения последнему элементу в массиве. (Последний элемент является тем с самыми высокими индексными значениями). Предположим значение свойства RandNumb объекта InitHandleArray, присвоенного элементу, A(4,5) является 59:

A(4,5) = InitHandleArray;
A(4,5).RandNumb
ans =

     59

Элемент в индексном месте A(4,5) является экземпляром класса InitHandleArray. Объект по умолчанию, используемый для элемента A(1,1), является также экземпляром класса InitHandleArray, но его RandNumb свойство установлено в различное случайное число.

Чтобы заполнить предыдущие элементы массива, MATLAB вызывает конструктора класса, чтобы создать отдельный объект. MATLAB копирует этот объект во все оставшиеся элементы массива. Вызов конструктора, чтобы создать объект по умолчанию привел к другому вызову функции randi, которая возвращает новое случайное число:

A(1,1).RandNumb
ans =

     10

MATLAB копирует этот второй экземпляр во все оставшиеся элементы массива:

A(2,2).RandNumb
ans =

     10
A(2,3).RandNumb
ans =

    10

При инициализации объектного массива MATLAB присваивает копию отдельного объекта к пустым элементам в массиве. MATLAB дает каждому объекту уникальный дескриптор так, чтобы позже можно было присвоить различные значения свойств каждому объекту. Объекты не эквивалентны:

A(1,1) == A(2,2)
ans =

     0

Таким образом, указатель A(1,1) не называет тот же объект A(2,2). Создание массива с оператором, таким как:

A(4,5) = InitHandleArray;

результаты в двух вызовах конструктора класса. Первое создает объект для элемента массива A(4,5). Второе создает объект по умолчанию, который MATLAB копирует во все остающиеся элементы пустого массива.

Сопутствующая информация

Для получения информации о манипуляции с массивами смотрите Многомерные массивы

См. Инициализацию свойств к Уникальным Значениям для получения информации о присвоении значений к свойствам.

Смотрите, что Объектный массив Индексирует для получения информации о реализации методов subsasgn для вашего класса.

Была ли эта тема полезной?