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

Зачем перегружать функции

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

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

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

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

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

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

Чтобы перегрузить функцию MATLAB:

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

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

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

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

Примечание

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

Перегрузите штриховую функцию

Для работы с объектами вашего класса удобно перегружать обычно используемые функции. Например, предположим, что класс задает свойство, которое хранит данные, которые вы часто график. The 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

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

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

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

Вызовите метод, используя объект:

bar(md)

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

md.bar

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

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

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

p1 + p2

Для получения информации о перегрузке операторов см. раздел «Перегрузка операторов».

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

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

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

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

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

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

Похожие темы