Функции перегрузки в определениях классов

Почему перегрузка функционирует

Классы могут переопределить функции MATLAB® путем реализации методов, имеющих то же имя. Перегрузка полезна при определении специализированных типов, что вы хотите вести себя как существующие типы MATLAB. Например, можно реализовать реляционные операции, функции построения графика и другие обычно используемые функции MATLAB, чтобы работать с объектами класса.

Можно также изменить поведения по умолчанию путем реализации определенных функций, которые управляют этими поведениями. Для получения дополнительной информации о функциях, которые изменяют поведения по умолчанию, см. Методы, Которые Изменяют Поведение По умолчанию.

Реализация перегруженных функций MATLAB

Методы класса могут обеспечить реализации функций MATLAB, которые работают только с экземплярами класса. Это ограничение возможно, потому что MATLAB может всегда идентифицировать, к которому классифицируют объект, принадлежит.

MATLAB использует доминирующий аргумент, чтобы определить который версия функции вызвать. Если доминирующий аргумент является объектом, то MATLAB вызывает метод, заданный классом объекта, если вы существуете.

В случаях, где класс задает метод с тем же именем как глобальная функция, реализация класса функции, как говорят, перегружает исходное глобальное внедрение.

Перегружать функцию MATLAB:

  • Задайте метод с тем же именем как функция, которую вы хотите перегрузить.

  • Убедитесь, что список аргументов метода принимает объект класса, который использование MATLAB определить который версия вызвать.

  • Выполните необходимые шаги в методе, чтобы реализовать функцию. Например, получите доступ к свойствам объектов, чтобы управлять данными.

Обычно метод, который перегружает функцию, приводит к результатам, похожим на функцию MATLAB. Однако нет никаких требований относительно того, как вы реализуете метод перегрузки. Метод перегрузки не должен совпадать с подписью перегруженной функции.

Примечание

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

Перегрузка Функции панели

Удобно перегрузить обычно используемые функции, чтобы работать с объектами вашего класса. Например, предположите, что класс задает свойство, которое хранит данные что вы часто график. MyData класс заменяет bar функционируйте и добавляет заголовок на график:

classdef MyData
   properties
      Data
   end
   methods
      function obj = MyData(d)
         if nargin > 0
            obj.Data = d;
         end
      end
      function bar(obj)
         y = obj.Data;
         bar(y,'EdgeColor','r');
         title('My Data Graph')
      end
   end
end

MyData bar метод имеет то же имя как bar MATLAB функция. Однако MyData bar метод требует MyData возразите, как введено. Поскольку метод специализирован для MyData объекты, это может извлечь данные из Data свойство и создает специализированный график.

Использовать bar метод, создайте объект:

y = rand(1,10);
md = MyData(y);

Вызовите метод с помощью объекта:

bar(md)

Можно также использовать запись через точку:

md.bar

Реализация операторов MATLAB

Классы, спроектированные, чтобы реализовать новые типы данных MATLAB обычно, задают определенные операторы, такие как сложение, вычитание или равенство.

Например, стандартное сложение MATLAB (+) не могут добавить два полинома, потому что эта операция не задана простым сложением. Однако polynomial класс может задать свой собственный plus метод, который язык MATLAB вызывает, чтобы выполнить сложение polynomial объекты, когда вы используете + символ:

p1 + p2

Для получения информации о перегружающихся операторах см. Перегрузку операторов.

Правила для именования, чтобы избежать конфликтов

Имена методов, свойств и событий ограничены по объему к классу. Поэтому придерживайтесь следующих правил избежать конфликтов по совпадению имен:

  • Можно снова использовать имена, которые вы использовали в несвязанных классах.

  • Можно снова использовать имена в подклассах, если у участника нет открытого доступа или защищенного доступа. Эти имена затем обращаются к совершенно различным методам, свойствам и событиям, не влияя на определения суперкласса

  • В классе все имена существуют в том же пространстве имен и должны быть уникальными. Класс не может задать два метода с тем же именем, и класс не может задать локальную функцию с тем же именем как метод.

  • Имя статического метода рассматривается без его префикса класса. Таким образом имя статического метода без его префикса класса не может совпадать с именем никакого другого метода.

Похожие темы