Можно преобразовать объект одного класса в объект другого класса. Метод конвертера имеет то же имя что и класс, в который он преобразует, например 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 сравнивает класс переменной Right-Side с классом переменной Left-Side. Если классы отличаются, MATLAB пытается преобразовать переменную Right-Side в класс переменной Left-Side. Для выполнения этого преобразования MATLAB сначала ищет метод класса Right-Side, имя которого совпадает с именем класса Left-Side. Такой способ является методом конвертера, который аналогичен операции typecast на других языках.
Если класс 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
метод в корневом суперклассе. The convertObject
метод должен преобразовать объект, не являющийся членом, в допустимый представитель гетерогенной иерархии.
Для получения дополнительной информации о реализации convertObject
метод, см matlab.mixin.Heterogeneous
.