exponenta event banner

Неявное преобразование класса

Механизм преобразования классов

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

Для выполнения преобразования MATLAB пытается вызвать метод конвертера, определенный преобразуемым классом. Метод конвертера имеет то же имя, что и целевой класс. Например, если класс определяет метод с именем double, этот метод преобразует объект класса в объект класса double.

Если в классе исходного объекта не существует конвертера, этот вызов разрешается в вызов конструктора класса назначения.

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

Связь

В операциях конкатенации доминирующий объект определяет класс результирующего массива. MATLAB определяет доминирующий объект следующим образом:

  • Определяемые пользователем классы доминируют над встроенными классами, такими как double.

  • Если между любыми двумя объектами нет определенного отношения доминирования, то доминирует самый левый объект

Например, в инструкции C = [A,B], если A является доминирующим объектом, MATLAB пытается преобразовать B к классу A.

Подстрочное назначение

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

Например, назначение объекта ClassB к элементу массива A требует преобразования.

A = ClassA;
B = ClassB;
A(2) = B;

MATLAB сначала ищет метод конвертера, определенный классом исходного объекта B. Этот метод конвертера должен иметь имя ClassA в данном случае. Подстрочное назначение фактически является вызовом преобразователя, определенного ClassB:

A(2) = ClassA(B) % Call method of ClassB

Если метод конвертера не существует, этот вызов разрешается вызову конструктора класса назначения:

A(2) = ClassA(B) % Call ClassA constructor

Связанные темы