2017-11-17 17 views
0

単純なオーバーロードされたplus関数を持つMATLABクラスがあり、オブジェクトを返すことができません。私は関数が各フィールド値を一緒に追加し、同じクラスのオブジェクトを出力し、フィールド値は2つの入力の合計であるとします。 2つのオブジェクトを一緒に追加すると、オブジェクトではなく構造体が得られます。私はクラスには新しく、間違っていると思われます。どんな助けも素晴らしいだろう。次のようにオーバーロードされたメソッド操作から同じクラスのオブジェクトを返すのは、structではなく "plus"ですか?

コードは次のとおりです。

classdef Molar 
    properties 
     A = 0; 
     B = 0; 
     C = 0; 
    end 
    methods 
     function M = Molar(val) 
      M.A = val; 
      M.B = val+1; 
      M.C = val+2; 
     end 
     function M = plus(M1,M2) 
      M.A = M1.A + M2.A; 
      M.B = M1.B + M2.B; 
      M.C = M1.C + M2.C; 
     end 

    end 
end 

それが実行され、私が行うと:私は+操作を行う際に

>> x = Molar(2) 
x = 
    Molar with properties: 

    A: 2 
    B: 3 
    C: 4 
>> y = Molar(3) 
y = 
    Molar with properties: 

    A: 3 
    B: 4 
    C: 5 

は、その後、私はstructを取得します。他のMolarオブジェクトを返すにはどうすればいいですか?

>> x+y 
ans = 
    struct with fields: 

    A: 5 
    B: 7 
    C: 9 

コンストラクタメソッドを別に使用する必要があるのか​​どうか疑問です。 この点に関する助けがあれば幸いです。

答えて

3

最初のパラメータには、返された値でなければなりません:

function M = plus(M,M2) 
    M.A = M.A + M2.A; 
    M.B = M.B + M2.B; 
    M.C = M.C + M2.C; 
end 
+0

なるほど、ありがとう!非常に賢い。だからクラスをコーディングするための規範ですか?またはこれはハックと見なされますか? – teepee

+0

はい、C++(暗黙的に)とpython(明示的に)として、クラスメソッドの最初のパラメータはそれ自身です。 – rahnema1

関連する問題