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