Классы могут переопределить функции 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 (+
) не может добавить два многочлена, потому что эта операция не задана простым сложением. Однако класс polynomial
может задать свой собственный метод plus
, который язык MATLAB вызывает, чтобы выполнить сложение объектов polynomial
, когда вы используете символ +
:
p1 + p2
Для получения информации о перегружающихся операторах см. Перегрузку операторов.
Имена методов, свойств и событий ограничены по объему к классу. Поэтому придерживайтесь следующих правил избежать конфликтов по совпадению имен:
Можно снова использовать имена, которые вы использовали в несвязанных классах.
Можно снова использовать имена в подклассах, если у участника нет открытого доступа или защищенного доступа. Эти имена затем обращаются к совершенно различным методам, свойствам и событиям, не влияя на определения суперкласса
В классе все имена существуют в том же пространстве имен и должны быть уникальными. Класс не может задать два метода с тем же именем, и класс не может задать локальную функцию с тем же именем как метод.
Имя статического метода рассматривается без его префикса класса. Таким образом имя статического метода без его префикса класса не может совпадать с именем никакого другого метода.