Matlab中在类定义中重载函数

目录

在类定义中重载函数

为什么重载函数

实现重载的 MATLAB 函数

避免冲突的命名规则


在类定义中重载函数

为什么重载函数

        类可以通过实现同名的方法来重新定义 MATLAB® 函数。在定义行为与现有 MATLAB 类型相似的特化类型时,重载非常有用。例如,可以实现关系运算、绘图函数和其他常用的 MATLAB 函数来处理类中的对象。还可以通过实现控制默认行为的特定函数来修改这些行为。

实现重载的 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

避免冲突的命名规则

        方法、属性和事件的名称的作用域限于类内。因此,请遵守以下规则以避免名称冲突:

  • 可以重用在不相关类中使用的名称。

  • 如果成员没有公共或受保护访问权限,则可以在子类中重用名称。然后,这些名称便可以引用完全不同的方法、属性和事件,而不会影响超类定义

  • 在一个类中,所有名称都存在于相同的命名空间中,并且必须唯一。一个类无法定义两个同名的方法,而且一个类无法定义与方法同名的局部函数。

  • 静态方法的名称被认为没有其类前缀。因此,没有类前缀的静态方法名称不能与任何其他方法的名称相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值