Установление приоритета объекта позволяет 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
.