Установление приоритета объекта позволяет MATLAB® определить который возможно из многих версий оператора или функции, чтобы вызвать в данной ситуации.
Например, рассмотрите выражение
objectA + objectB
Обычно, объекты имеют одинаковый приоритет, и метод, сопоставленный с крайним левым объектом, называется. Однако существует два исключения:
Классы, заданные с синтаксисом classdef, имеют приоритет по этим классам MATLAB:
double, single, int64, uint64, int32, uint32, int16, uint16, int8, uint8, char, string, logical, cell, struct и function_handle.
Классы, заданные с синтаксисом classdef, могут задать свой относительный приоритет относительно других классов с помощью атрибута InferiorClasses.
Рассмотрите пример в Представлении Полиномов с Классами. Класс DocPolynom задает метод plus, который включает сложение объектов DocPolynom. Учитывая объект p:
p = DocPolynom([1 0 -2 -5])
p =
x^3-2*x-5
выражение:
1 + p
ans =
x^3-2*x-4
вызывает
метод plus DocPolynom (который преобразовывает double, 1, к объекту DocPolynom и затем реализует сложение двух полиномов). Класс DocPolynom имеет приоритет по встроенному классу double.
Можно задать относительный приоритет классов, заданных с синтаксисом classdef путем листинга нижних классов в атрибуте класса. Свойство InferiorClasses помещает класс ниже других классов в иерархии приоритета. Задайте свойство InferiorClasses в операторе classdef:
classdef (InferiorClasses = {?class1,?class2}) myClass
Этот атрибут устанавливает относительный приоритет класса, задаваемого с порядком перечисленных классов.
Если objectA выше objectB в иерархии приоритета, то выражение
objectA + objectB
вызовы @ classA /plus.m. С другой стороны, если objectB выше objectA в иерархии приоритета, то MATLAB вызывает @ classB /plus.m.