34.6.1 Creating a classdef Class

Last-modified: 2025-03-09 (日) 09:00:21

34.6.1classdefクラスの作成

非常に基本的なclassdef値クラス (値クラスとハンドル クラスを参照) は次のように定義されます。

classdef some_class
 properties
 endproperties
 methods
 endmethods
endclassdef

旧スタイルのクラスとは対照的に、properties-endproperties ブロックとmethods-endmethodsブロックを使用してクラスのプロパティとメソッドを定義できます。 両方のブロックは空なので、この特定のケースでは省略できます。

わかりやすくするために、クラスのより高度な実装を、例classdefを使用して再度示しますpolynomial( 「クラスの作成」を参照)。

classdef polynomial2
 properties
   poly = 0;
 endproperties
 methods
   function p = polynomial2 (a)
     if (nargin == 1)
       if (isa (a, "polynomial2"))
         p.poly = a.poly;
       elseif (isreal (a) && isvector (a))
         p.poly = a(:).';  # force row vector
       else
         error ("polynomial2: A must be a real vector");
       endif
     endif
   endfunction
   function disp (p)
     a = p.poly;
     first = true;
     for i = 1 : length (a);
       if (a(i) != 0)
         if (first)
           first = false;
         elseif (a(i) > 0 || isnan (a(i)))
           printf (" +");
         endif
         if (a(i) < 0)
           printf (" -");
         endif
         if (i == 1)
           printf (" %.5g", abs (a(i)));
         elseif (abs (a(i)) != 1)
           printf (" %.5g *", abs (a(i)));
         endif
         if (i > 1)
           printf (" X");
         endif
         if (i > 2)
           printf (" ^ %d", i - 1);
         endif
       endif
     endfor
     if (first)
       printf (" 0");
     endif
     printf ("\n");
   endfunction
 endmethods
endclassdef

クラスのオブジェクトpolynomial2は、クラス コンストラクターを呼び出すことによって作成されます。

>> p = polynomial2 ([1, 0, 1])
⇒ p =
1 + X ^ 2