2017-04-06 2 views
0

matlab.mixin.Heterogeneousクラスから派生したMatlabで異種オブジェクト配列を作成しました。私の配列にスーパークラスのオブジェクトが含まれ、Neuron,Astrocyteなどのサブクラスが含まれています サブクラスに割り当てるメソッドは、異なる刺激によってその動作をシミュレートすることになっています。振る舞いを計算するために、私は数学的操作を実行するオブジェクトが必要です。しかし、クラスのメソッドで演算子を使用する関数を定義すると、Matlabは次のように指示します。異種配列内の数学演算(Matlab)

'Cells'型の入力引数には未定義の演算子 ' - 'があります。

は、それから私は、複数の継承(Cells < matlab.mixin.Heterogeneous & double)と私のスーパークラスを構築しようとしましたが、このエラーが表示されます:細胞を用い

エラー: クラス「細胞」の matlab.mixinのサブクラスすることはできません異種混合であり、 クラス 'subs'から 'subsasgn'メソッドを継承します。

...

:それはmatlab.mixin.Heterogeneous "

あなたは以下のあなたのサブクラスでメソッドをオーバーライドすることはできませんの説明で述べているように、驚くべきことではありません

subsasgn

私の唯一の考え方は、クラス外の関数として、異種オブジェクト配列で数学演算を実行する可能性があるかどうかを質問したかったのです。

+1

クラスの演算子を定義する必要があります。 'マイナス'は '-'を定義します – Suever

答えて

0

算術演算子をクラスのメソッドとして定義する必要があります。そうしないと、カスタムクラスで演算子を操作できなくなります。例えば、減算をサポートするために、あなたのクラスのためのあなたのhetergeneousアレイのminus方法は、異なるクラスのselfの要素が適切に処理されていることを確認する必要があることを

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をオーバーロードする必要があります。

すべての算術演算子メソッドのリストが見つかります。here

+0

これを私の' Cells'スーパークラスのメソッド部分に追加すると、Cellからdoubleへの変換はできません。 – Phil

+0

@ P.Hornauer Right。これは一例です。何らかの方法で 'Cells'クラスをあなたが算術演算をすることができるものに変換する必要があります。あなたの 'Cells'クラスの実際の「価値」は何ですか?' -'がどのように行動すると思いますか? – Suever

+0

ああ、申し訳ありませんが、私のせいです。私の 'Cells'クラスは、クラスdoubleのすべてのプロパティで構成されています。ですから、私は基本的にオペレータが通常どおり行動するようにします。しかし、私は正直なところ、それをどうするか分かりません。 – Phil