При инициализации массива указателя объектов 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 =
10MATLAB копирует этот второй образец во все оставшиеся элементы массива:
A(2,2).RandNumb
ans =
10A(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 методы для вашего класса.