有两种本质上不同的类型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-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2