34.6.1创建classdef

一个非常基本的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

版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2