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 。多項式クラスのオーバーロードされた関数のもう 1 つの興味深い例は、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