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

此函数只是将功传递给正常的octavepolyval作用多项式类重载函数的另一个有趣的例子是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-2025 Octave中文网

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