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