【问题标题】:MatLab operator overloading [duplicate]MatLab 运算符重载
【发布时间】:2012-08-28 20:48:10
【问题描述】:

可能重复:
How do properties work in Object Oriented MATLAB?

我使用 MatLab 已经有一段时间了,但最近才开始使用 OOP。

我有一个类是一个简单的链表(它可以是任何东西)。在类中声明了一些方法。方法是否可以修改调用它们的实例?

instance.plotData() 不能修改实例的任何属性。

我必须返回该函数的实例才能对实例本身产生实际影响:

instance = instance.plotData();

这看起来真的很麻烦。有没有更好的方法来完成任务?

加法:

classdef handleTest < handle

  properties
      number
  end

  methods
      function addNode(this)
          a = length(this);
          this(a+1) = handleTest;
      end
  end
end

如果我打电话:

x = handleTest
x.addNode()

那么x仍然只有一个节点。

【问题讨论】:

    标签: function matlab object overloading


    【解决方案1】:

    一种可能的解决方案是从 handle 类派生,即使用类似的东西

    classdef YourClass < handle
        function plotData(obj)
            ... modify the obj here ...
        end
    end
    

    然而,这也有影响,如果你复制实例,即如果你做一个

    a = YourClass(...);
    b = a;
    

    那么ba别名,每当您更改a 时,您也会修改b,反之亦然 反之亦然(意味着数据只在后台存储一次)。

    Matlab documentation 用于句柄类和值类的区别。

    【讨论】:

    • 谢谢,梅尔沃尔夫。是否可以将类的实例添加到使用此类句柄控制的已定义实例中?例如,我有一个“节点”类。 n(1) = 节点();是类实例的初始化行。我想向向量添加更多节点——然后一个函数将执行以下命令:n(2) = node();然后修改节点的参数。 Handle 版本似乎不起作用。我是否歪曲了句柄操作员?谢谢,SunnyBuy
    • @SunnyBoyNY:您能否将其作为一个新问题提出并发布您的node 的简短代码示例?我想,我不完全明白你想做什么。
    • 让我编辑问题
    • @SunnyBoyNY:好的,我明白了。我不会尝试将句柄添加到自身(在类内部),而是创建一个handleTest 的向量,该向量存储在调用程序的某个位置。如果你想包装这个向量,你可以创建另一个类,例如handleList。此类有一个addNode(),它将handleTest 的实例添加到内部向量中。
    猜你喜欢
    • 1970-01-01
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2016-02-19
    • 1970-01-01
    • 2011-06-21
    相关资源
    最近更新 更多