演算子のオーバーロード
演算子をオーバーロードする理由
クラスに適した演算子を実装することにより、クラスのオブジェクトを MATLAB® 言語に統合することができます。たとえば、数値データを含むオブジェクトは、これらのオブジェクトを算術式で使用できるように +
、*
、-
などの算術演算を定義できます。関係演算子を実装することにより、switch
ステートメントや if
ステートメントなどの条件付きステートメントでオブジェクトを使用することができます。
演算子の定義方法
MATLAB 演算子を実装すると、クラスのオブジェクトを処理できます。演算子を実装するには、関連するクラス メソッドを定義します。
各演算子には、それぞれ関数が関連付けられています。たとえば、+ 演算子には関数 plus.m
が関連します。適切な名前をもつクラス メソッドを作成することによって、任意の演算子を実装できます。このメソッドでは、実装される演算に適した手順を実行できます。
演算子と関連付けられている関数名のリストについては、MATLAB 演算子と関連する関数を参照してください。
演算でのオブジェクトの優先順位
ユーザー定義のクラスは、組み込みクラスよりも優先順位が高くなります。たとえば、q
がクラス double
のオブジェクトであり、p
がユーザー定義クラスのオブジェクトであるとします。ユーザー定義クラスに plus
メソッドが存在する場合、次の 2 つの式はそのメソッドへの呼び出しを生成します。
q + p p + q
このメソッドがクラス double
のオブジェクトとユーザー定義クラスのオブジェクトを加算できるかどうかは、このメソッドを実装する方法に依存します。
p
と q
が異なるクラスのオブジェクトである場合、MATLAB は優先順位則を適用して、使用するメソッドを決定します。
MATLAB がどのメソッドを呼び出すかを決める方法の詳細については、メソッドの呼び出しを参照してください。
演算子の優先順位
オーバーロードされた演算子は、その演算子の元の MATLAB 優先順位を保持します。演算子の優先順位の詳細については、演算子の優先順位を参照してください。
サンプル実装 — 加算可能なオブジェクト
Adder
クラスは plus
メソッドを定義することにより、このクラスのオブジェクトの加算を実装します。Adder
はオブジェクトの加算を NumericData
プロパティ値の加算として定義します。plus
メソッドは、NumericData
プロパティ値が加算の結果となる Adder
オブジェクトを作成して返します。
また、Adder
クラスは、lt
メソッドを定義して "より小" の演算子 (<
) を実装します。lt
メソッドは、各オブジェクトの NumericData
プロパティの値を比較した後に論理値を返します。
classdef Adder properties NumericData end methods function obj = Adder(val) obj.NumericData = val; end function r = plus(obj1,obj2) a = double(obj1); b = double(obj2); r = Adder(a + b); end function d = double(obj) d = obj.NumericData; end function tf = lt(obj1,obj2) if obj1.NumericData < obj2.NumericData tf = true; else tf = false; end end end end
double コンバーターを使用して Adder
オブジェクトに数値を追加し、クラスのオブジェクトで加算を実行することができます。
a = Adder(1:10)
a = Adder with properties: NumericData: [1 2 3 4 5 6 7 8 9 10]
2 つのオブジェクトを加算します。
a + a
ans = Adder with properties: NumericData: [2 4 6 8 10 12 14 16 18 20]
double にキャストできる任意の値をもつオブジェクトを加算します。
b = uint8(255) + a
b = Adder with properties: NumericData: [256 257 258 259 260 261 262 263 264 265]
<
演算子を使用して、オブジェクト a
とオブジェクト b
を比較します。
a < b
ans = 1
ユーザー クラスの設計を実装するために必要なエラー チェックを、ユーザー クラスが提供していることを確認してください。
MATLAB 演算子と関連する関数
次の表は、MATLAB 演算子の関数名の一覧です。配列を扱う演算子 (スカラー拡張、ベクトル化された算術演算など) を実装するには、インデックスと連結の変更も必要となる場合があります。各関数の固有の情報を確認するには、次の表のリンクを使用してください。
演算 | 定義するメソッド | 説明 |
---|---|---|
|
| 2 項の加算 |
|
| 2 項の減算 |
|
| 単項マイナス |
|
| 単項プラス |
|
| 要素単位の乗算 |
|
| 行列乗算 |
|
| 要素単位の右除算 |
|
| 要素単位の左除算 |
|
| 行列の右除算 |
|
| 行列の左除算 |
|
| 要素単位のべき乗 |
|
| 行列のべき乗 |
|
| より小さい |
|
| より大きい |
| le (a,b) | 以下 |
| ge (a,b) | 以上 |
| ne (a,b) | 等しくない |
| eq (a,b) | 等しい |
| and (a,b) | 論理 AND |
| or (a,b) | 論理 OR |
| not (a) | 論理否定 |
|
| コロン演算子 |
|
| 複素共役転置 |
|
| 行列転置 |
|
| 水平方向の連結 |
|
| 垂直方向の連結 |
|
| 添字を使った参照 |
|
| 添字を使った代入 |
|
| 添字を使ったインデックス |