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

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

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

Похожие темы