在类定义中重载函数
为什么重载函数
类可以通过实现同名的方法来重新定义 MATLAB® 函数。在定义行为与现有 MATLAB 类型相似的特化类型时,重载非常有用。例如,您可以实现关系运算、绘图函数和其他常用的 MATLAB 函数来处理类中的对象。
您还可以通过实现控制默认行为的特定函数来修改这些行为。有关修改默认行为的函数的详细信息,请参阅Methods That Modify Default Behavior。
实现重载的 MATLAB 函数
类方法可以提供仅对类实例运行的 MATLAB 函数的实现。这种限制是允许的,因为 MATLAB 可以始终识别对象属于哪个类。
MATLAB 使用主导参数来确定要调用函数的哪个版本。如果主导参数是对象,则 MATLAB 调用由该对象的类定义的方法(如果存在的话)。
如果类定义了一个与全局函数同名的方法,则该类对该函数的实现称为重载原始全局实现。
要重载 MATLAB 函数,请执行以下操作:
定义与要重载的函数同名的方法。
确保方法参数列表接受类的对象,MATLAB 使用该对象来确定调用哪个版本。
执行方法中的必要步骤来实现该函数。例如,访问用于操作数据的对象属性。
通常,重载函数的方法会产生类似于 MATLAB 函数的结果。但是,关于如何实现重载方法不做要求。重载方法不需要与重载函数的签名相匹配。
注意
MATLAB 不支持在同一类中定义多个具有相同名称但具有不同签名的方法。
重载 bar 函数
重载常用函数来处理类的对象可为我们提供方便。例如,假设有一个类定义了一个属性,用来存储您经常绘制的数据。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 数据类型的类通常会定义一些运算符,如表示加法、减法或相等性的运算符。
例如,标准 MATLAB 加法 (+
) 无法将两个多项式相加,因为该运算不是由简单加法定义的。但是,polynomial
类可以定义自己的 plus
方法,MATLAB 语言调用该方法来使用 +
符号执行 polynomial
对象的相加:
p1 + p2
有关重载运算符的信息,请参阅运算符重载。
避免冲突的命名规则
方法、属性和事件的名称的作用域限于类内。因此,请遵守以下规则以避免名称冲突:
您可以重用在不相关类中使用的名称。
如果成员没有公共或受保护访问权限,则可以在子类中重用名称。然后,这些名称便可以引用完全不同的方法、属性和事件,而不会影响超类定义
在一个类中,所有名称都存在于相同的命名空间中,并且必须唯一。一个类无法定义两个同名的方法,而且一个类无法定义与方法同名的局部函数。
静态方法的名称被认为没有其类前缀。因此,没有类前缀的静态方法名称不能与任何其他方法的名称相同。