34.6.3 Methods

Last-modified: 2025-03-09 (日) 09:03:42

34.6.3 メソッド

すべてのクラス メソッドはブロック内で定義する必要があります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ブロック内で宣言され、クラスと同じ名前と、そのクラスのオブジェクトである出力引数を 1 つだけ持つ必要があります。

disp上記の例の関数 のように、組み込みメソッドまたは継承メソッドをオーバーロードして、オブジェクト のsome_class表示方法を Octave に指示することもできます (クラス メソッドを参照)。

一般に、メソッド定義の最初の引数は、常にメソッドの呼び出し元のオブジェクトです。クラス メソッドは、そのメソッドの最初の引数としてオブジェクトを渡すか、オブジェクトの後にドット (" .") とメソッド名を続けて引数として呼び出すことで呼び出すことができます。

>> obj = some_class ();
New instance created.
>> disp (obj);   # both are

obj.disp (); # equal
some_classでは、 メソッドはブロックfunc内で定義され、属性を次のいずれかの モードにmethods 設定します。Access

public
メソッドはどこからでもアクセスできます。

private
メソッドには他のクラス メソッドからのみアクセスできます。そのクラスのサブクラスからはアクセスできません。

protected
メソッドには、他のクラス メソッドおよびそのクラスのサブクラスからのみアクセスできます。

メソッドのデフォルトのアクセスはpubliですc。

最後に、メソッドcircumferenceは静的methods ブロックで定義され、 のオブジェクトを作成せずに使用できますsome_class。これは、クラス プロパティに依存しないメソッドに役立ちます。クラス名と静的メソッドの名前をドット (" .") で区切って、この静的メソッドを呼び出します。非静的メソッドとは対照的に、 のオブジェクトを使用して呼び出された場合でも、オブジェクトは最初の引数として渡されませんsome_class。

>> some_class.circumference (3)
⇒ ans =  18.850
>> obj = some_class ();
New instance created.
>> obj.circumference (3)
⇒ ans =  18.850

さらに、クラスメソッドは、クラスと同じ名前のフォルダー内の関数として定義でき、先頭に「@' シンボルで囲まれています (クラスの作成を参照)。メインclassdefファイルもこのクラス フォルダーに保存する必要があります。