Преобразователи объектов

Почему конвертеры реализации

Можно преобразовать объект одного класса к объекту другого класса. Метод конвертера имеет то же имя как класс, который это преобразовывает в, такие как 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 пытается преобразовать переменную Правой стороны в класс переменной Левой стороны. Чтобы сделать это преобразование, MATLAB сначала ищет метод класса Правой стороны, который имеет то же имя как класс Левой стороны. Такой метод является методом конвертера, который подобен операции преобразования типа на других языках.

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

Например, предположите, что вы делаете следующие присвоения:

A(1) = objA; % Object of class ClassA
A(2) = objB; % Object of class ClassB

MATLAB пытается вызвать метод ClassB по имени ClassA. Если никакой такой метод конвертера не существует, программное обеспечение MATLAB вызывает конструктора ClassA, передавая objB в качестве аргумента. Если конструктор ClassA не может принять objB как аргумент, то MATLAB возвращает ошибку.

Используйте массивы cell, чтобы хранить объекты различных классов.

Похожие темы

Была ли эта тема полезной?