有两种本质上不同类型的 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 = 2 >> a.prop1 ⇒ ans = 1
但这也意味着,您可能必须手动将修改属性的方法的返回值赋值回原对象:
>> a = value_class (); >> a.prop1 = 1; >> a.set_prop1 (3); ⇒ ans = <object value_class> >> ans.prop1 ⇒ ans = 3 >> a.prop1 ⇒ ans = 1
第二种类型是 句柄类。这类类必须派生自抽象 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 = 2 >> a.prop1 ⇒ ans = 2
由句柄类的方法修改的对象属性会持续更改:
>> a.set_prop1 (3); >> a.prop1 ⇒ ans = 3
版权所有 © 2024-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-4