34.6.5 値クラスとハンドルクラス
本質的に異なる 2 つのタイプのクラスがありclassdef、その主な違いは変数の割り当てに関する動作です。最初のタイプは値クラスです。
classdef value_class
properties
prop1
endproperties
methods
function obj = set_prop1 (obj, val)
obj.prop1 = val;
endfunction
endmethods
endclassdef
そのクラスのオブジェクトを別の変数に割り当てると、基本的に新しいオブジェクトが作成されます。
a = value_class ();
a.prop1 = 1;
b = a;
b.prop1 = 2;
b.prop1
⇒ ans = 2a.prop1
⇒ ans = 1しかし、これは、プロパティを変更するメソッドの出力を手動でオブジェクトに割り当てる必要がある場合もあることを意味します。
a = value_class ();
a.prop1 = 1;
a.set_prop1 (3);
⇒ ans = <object value_class>
ans.prop1
⇒ ans = 3a.prop1
2 番目のタイプはハンドル クラスです。これらのクラスは抽象handleクラスから派生する必要があります。
classdef handle_class < handle properties prop1 endproperties
methods
function set_prop1 (obj, val)
obj.prop1 = val;
endfunction
endmethods
endclassdef
次の例では、変数aと はbクラス のまったく同じオブジェクトを参照しますhandle_class。
a = handle_class ();
a.prop1 = 1;
b = a;
b.prop1 = 2;
b.prop1
⇒ ans = 2a.prop1
⇒ ans = 2ハンドル クラスのメソッドによって変更されるオブジェクト プロパティは永続的に変更されます。
a.set_prop1 (3);
a.prop1