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

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

Классы могут переопределить функции 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

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

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

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

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

bar(md)

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

md.bar

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

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

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

p1 + p2

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

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

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

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

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

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

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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте