所有类方法都必须在中定义methods
阻碍。本小节末尾介绍了该规则的例外情况。那些methods
块可以具有指定访问权限的附加属性,或者这些方法是否是静态的,即可以在不创建该类的对象的情况下调用的方法。
classdef some_class methods function obj = some_class () disp ("New instance created."); endfunction function disp (obj) disp ("Here is some_class."); endfunction endmethods methods (Access = mode) function r = func (obj, r) r = 2 * r; endfunction endmethods methods (Static = true) function c = circumference (radius) c = 2 * pi () .* radius; endfunction endmethods endclassdef
类的构造函数在中语句methods
块和必须与类具有相同的名称,并且只有一个作为其类的另一个对象的输出参数。
也可以重载内置或继承的方法,如disp
函数来告诉Octave对象的some_class
应显示(详见类方法).
通常,方法定义中的第一个参数始终是从中调用它的对象。类方法可以通过将对象作为第一个参数传递给该方法来调用,也可以通过调用后面跟着一个点的对象(.
)和方法的名称以及随后的参数:
>> obj = some_class (); New instance created. >> disp (obj); # both are >> obj.disp (); # equal
在里面some_class
,方法func
在中定义methods
块设置Access
把某事归因于某人mode,是其中之一:
public
这些方法可以从任何地方访问。
private
只能从其他类方法访问这些方法。该类的子类无法访问它们。
protected
只能从其他类方法和该类的子类访问这些方法。
方法的默认访问权限为public
.
最后,方法circumference
在静态中定义methods
块,并且可以在不创建的对象的情况下使用some_class
。这对于不依赖于任何类属性的方法非常有用。类名和静态方法的名称,用句点(.
),调用thistatic方法。与非静态方法相比,即使使用的对象调用,该对象也不会作为第一个参数传递some_class
.
>> some_class.circumference (3) ⇒ ans = 18.850 >> obj = some_class (); New instance created. >> obj.circumference (3) ⇒ ans = 18.850
此外,类方法可以定义为文件夹中的函数,该文件夹与前缀为“”的类同名@符号(详见创建类). 主要classdef
文件也必须存储在这里的类文件夹中。
版权所有 © 2024-2025 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2