34.4.1 函数重载

任何 Octave 函数都可以被重载,这允许根据需要调用函数特定于对象的版本。多项式类的一个贴切示例是重载 polyval 函数。

function [y, dy] = polyval (p, varargin)

  if (nargout > 1)
    [y, dy] = polyval (fliplr (p.poly), varargin{:});
  else
    y = polyval (fliplr (p.poly), varargin{:});
  endif

endfunction

此函数只是将工作交给普通的 Octave polyval 函数。多项式类重载函数的另一个有趣的例子是 plot 函数。

function h = plot (p, varargin)

  n = 128;
  rmax = max (abs (roots (p.poly)));
  x = [0 : (n - 1)] / (n - 1) * 2.2 * rmax - 1.1 * rmax;
  if (nargout > 0)
    h = plot (x, polyval (p, x), varargin{:});
  else
    plot (x, polyval (p, x), varargin{:});
  endif

endfunction

这允许多项式在其根的附近区域中被绘制。

对重载特别感兴趣的函数是类转换函数,例如 double。重载这些函数允许 cast 函数与用户类一起工作。它还有助于将类对象与其他类的方法和函数一起使用,因为对象可以转换为新函数所需的输入形式。对于多项式类,一个 double 函数的示例如下所示

function a = double (p)
  a = p.poly;
endfunction

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

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