2017-04-06 44 views
0

我在Matlab中创建了一个异类对象数组,该类来源于matlab.mixin.Heterogeneous类。我的数组现在包含超类Cells的对象和Neuron,Astrocyte等子类。 我想分配给我的子类的方法应该根据不同的激励来模拟它们的行为。为了计算行为,我需要对象来执行数学运算。但是,当我定义使用运营商在类的方法的功能,Matlab的告诉我,例如为:异构数组中的数学运算(Matlab)

未定义操作“ - ”类型的输入参数的“细胞”。

然后我试图构建我有多个继承(Cells < matlab.mixin.Heterogeneous & double)超类,但随后会出现这样的错误:

使用错误细胞: 类“细胞”不能是 matlab.mixin的子类。异构并且继承 类'double'的'subsasgn'方法。

这并不奇怪,因为它在 'matlab.mixin.Heterogeneous'

不能覆盖在你的子类下面的方法描述说:

...

subsasgn

因为我唯一的想法是定义方法s作为类之外的函数,我想问一下是否有可能在异构对象数组中执行数学运算。

+1

您需要为您的类定义运算符。 'minus'将定义'-' – Suever

回答

0

您需要将算术运算符定义为类的方法,否则它们将无法在您的自定义类上运行。例如,为了支持减法,你需要重载minus为类

methods 
    function self = minus(self, other) 
     % Loop through the array and apply the - operator to each 
     for k = 1:numel(self) 
      self(k).prop1 = self(k).prop1 - other.prop1; 
      self(k).prop2 = self(k).prop2 - other.prop2; 
     end 
    end 
end 

请注意,您的异构阵列minus方法需要确保不同类别的self元素被适当处理。

可以找到所有算术运算符方法的列表here

+0

当我将它添加到我的“Cells”超类的方法部分时,它说:从单元转换为double是不可能的。 – Phil

+0

@ P.Hornauer对。这是一个例子。你必须*以某种方式将你的'Cells'类转换成你可以进行算术运算的类。 “细胞”类的实际“价值”是什么,以及你期望'-'表现如何? – Suever

+0

对不起,我的错。我的'Cells'类包含所有类的所有属性,因为我想对它们进行计算。所以我基本上希望操作员像往常一样行事。但我真的不知道该怎么做。 – Phil