Можно преобразовать объект одного класса в объект другого класса. Метод конвертера имеет то же имя, что и класс, в который он преобразует, например char или double. Рассмотрим метод конвертера как перегруженный метод конструктора другого класса. Преобразователь принимает экземпляр собственного класса и возвращает объект другого класса.
Преобразователи позволяют:
Использовать методы, определенные для другого класса
Убедитесь, что выражения, включающие объекты смешанных типов классов, выполняются правильно
Управление интерпретацией экземпляров в других контекстах
Предположим, что вы определяете polynomial класс. При создании double метод для polynomial класс, его можно использовать для вызова других функций, требующих ввода типа double.
p = polynomial(...); dp = double(p); roots(dp)
p является полиномиальным объектом, double является методом polynomial класс, и roots - стандартная функция MATLAB ®, входные аргументы которой являются коэффициентами многочлена.
Классы, определенные в пакетах, могут иметь имена, разделенные точками. Фамилия является классом, а предшествующие имена являются пакетами. Назовите методы преобразования с помощью квалификаторов пакетов в именах методов. Например, метод преобразования объектов MyClass к объектам PkgName.PkgClass класс использует это имя метода:
classdef MyClass ... methods function objPkgClass = PkgName.PkgClass(objMyclass) ... end end end
Невозможно определить метод конвертера, использующий точки в имени в отдельном файле. Определение преобразователей класса пакетов в classdef файл.
При выполнении оператора назначения с подстрочными индексами, например:
A(1) = myobj;
MATLAB сравнивает класс правой переменной с классом левой переменной. Если классы отличаются, MATLAB пытается преобразовать переменную Right-Side в класс переменной Left-Side. Для этого преобразования MATLAB сначала ищет метод класса Right-Side, имя которого совпадает с именем класса Left-Side. Такой способ представляет собой конвертерный способ, который аналогичен операции типовой передачи на других языках.
Если класс Right-Side не определяет метод для преобразования из класса Right-Side в класс Left-Side, MATLAB вызывает конструктор класса Left-Side. передавая его правой переменной.
Например, предположим, что выполняются следующие назначения:
A(1) = objA; % Object of class ClassA A(2) = objB; % Object of class ClassB
MATLAB пытается вызвать метод ClassB названный ClassA. Если такой метод преобразования не существует, программное обеспечение MATLAB вызывает ClassA конструктор, передача objB в качестве аргумента. Если ClassA конструктор не может принять objB в качестве аргумента MATLAB возвращает ошибку.
Использовать cell массивы для хранения объектов разных классов.
Для поддержки формирования гетерогенных массивов с использованием объектов, не входящих в гетерогенную иерархию, реализуйте convertObject метод в корневом суперклассе. convertObject метод должен преобразовать объект, не являющийся членом, в действительный член гетерогенной иерархии.
Для получения подробной информации о внедрении convertObject метод, см. matlab.mixin.Heterogeneous.