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

При инициализации массива объектов указателя 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 копирует во все остающиеся элементы пустого массива.

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

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

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

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