exponenta event banner

Приоритет объекта при вызове метода

Приоритет объекта

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

вызывает DocPolynom plus метод (который преобразует 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.

Связанные темы