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