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

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

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

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

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

The 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 методы для вашего класса.