Перегрузка операторов

Почему операторы перегрузки

Путем реализации операторов, которые подходят для класса, можно интегрировать объекты класса на язык MATLAB®. Например, объекты, которые содержат числовые данные, могут задать арифметические операции как +, *, - так, чтобы можно было использовать эти объекты в арифметических выражениях. Путем реализации операторов отношения можно использовать объекты в условных операторах, как операторы switch и if.

Как задать операторы

Можно реализовать операторы MATLAB, чтобы работать с объектами класса. Чтобы реализовать операторы, задайте связанные методы класса.

Каждый оператор имеет присоединенную функцию (e. g., + оператор имеет связанную функцию plus.m). Можно реализовать любой оператор путем создания метода класса с соответствующим именем. Этот метод может выполнить любые шаги, подходят для реализовываемой операции.

Для списка операторов и имен присоединенной функции, смотрите Операторы MATLAB и Присоединенные функции.

Приоритет объекта в операциях

Пользовательские классы имеют более высокий приоритет, чем встроенные классы. Например, предположите, что q является объектом класса, double и p являются пользовательским классом. Оба из этих выражений генерируют вызов метода plus в пользователе - задают класс, если это существует:

q + p 
p + q

Может ли этот метод добавить объекты класса, double и пользовательский класс зависят от того, как вы реализуете метод.

Когда p и q являются объектами различных классов, MATLAB применяет правила приоритета определить который метод использовать.

Приоритет объекта в Вызове метода предоставляет информацию о том, как MATLAB определяет который метод вызвать.

Приоритет операторов

Перегруженные операторы сохраняют исходный приоритет MATLAB для оператора. Для получения информации о приоритете оператора см. Приоритет операторов.

Демонстрационная реализация - объекты Аддэйбла

Класс Adder реализует сложение для объектов этого класса путем определения метода plus. Adder задает сложение объектов как сложение значений свойств NumericData. Метод plus создает и возвращает объект Adder, значение свойства NumericData которого является результатом сложения.

Класс Adder также реализует меньше, чем оператор (<) путем определения метода lt. Метод lt возвращает логическое значение после сравнения значений в каждом свойстве объекта NumericData.

classdef Adder
   properties
      NumericData
   end
   methods
      function obj = Adder(val)
         obj.NumericData = val;
      end
      function r = plus(obj1,obj2)
         a = double(obj1);
         b = double(obj2);
         r = Adder(a + b);
      end
      function d = double(obj)
         d = obj.NumericData;
      end
      function tf = lt(obj1,obj2)
         if obj1.NumericData < obj2.NumericData
            tf = true;
         else
            tf = false;
         end
      end
   end
end

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

a = Adder(1:10)
a = 

  Adder with properties:

    NumericData: [1 2 3 4 5 6 7 8 9 10]

Добавьте два объекта:

a + a
ans = 

  Adder with properties:

    NumericData: [2 4 6 8 10 12 14 16 18 20]

Добавьте объект с любым значением, которое может быть брошено, чтобы удвоиться:

b = uint8(255) + a
b = 

  Adder with properties:

    NumericData: [256 257 258 259 260 261 262 263 264 265]

Сравните возражает a и b с помощью оператора <:

a < b
ans =

     1

Гарантируйте, что ваш класс обеспечивает любую проверку ошибок, требуемую реализовывать ваш дизайн класса.

Операторы MATLAB и присоединенные функции

В следующей таблице перечислены имена функций для операторов MATLAB. Реализация операторов, чтобы работать с массивами (скалярное расширение, векторизованные арифметические операции, и так далее), может также потребовать индексации изменения и конкатенации. Используйте ссылки в этой таблице, чтобы найти определенную информацию о каждой функции.

Операция

Метод, чтобы задать

Описание

a + b

plus (a,b)

Сложение в двоичной системе

a, B

minus (a,b)

Вычитание в двоичной системе

A

uminus (a)

Унарный минус

+a

uplus (a)

Унарный плюс

a, B

times (a,b)

Поэлементное умножение

a, B

mtimes (a,b)

Умножение матриц

a, B

rdivide (a,b)

Правильное поэлементное деление

a, B

ldivide (a,b)

Покинутое поэлементное деление

a, B

mrdivide (a,b)

Матричное правильное деление

a, B

mldivide (a,b)

Матрица покинула деление

a. ^b

power (a,b)

Поэлементная степень

a^b

mpower (a,b)

Матричная степень

a < b

lt (a,b)

Меньше, чем

a > b

gt (a,b)

Больше, чем

a <= b

le (a,b)

Меньше чем или равный

a >= b

ge (a,b)

Больше, чем или равный

a ~= b

ne (a,b)

Не равняются

a == b

eq (a,b)

Равенство

a, B

and (a,b)

Логический AND

a | b

or (a,b)

Логический OR

~a

not (a)

Логический НЕТ

a: d: b

a, B

colon (a,d,b)

colon(a,b)

Оператор двоеточия

a

ctranspose (a)

Комплексное сопряженное транспонирование

a.'

transpose (a)

Матрица транспонирует

A, B

horzcat (a,b,...)

Горизонтальная конкатенация

A, B

vertcat(a,b,...)

Вертикальная конкатенация

a(s1,s2,...sn)

subsref (a,s)

Преобразованная в нижний индекс ссылка

a(s1,...,sn) = b

subsasgn (a,s,b)

Преобразованное в нижний индекс присвоение

b(a)

subsindex (a)

Нижний индекс

Похожие темы

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