主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

演算子のオーバーロード

演算子をオーバーロードする理由

クラスに適した演算子を実装することにより,クラスのオブジェクトをMATLAB®言語に統合することができます。たとえば,数値データを含むオブジェクトは、これらのオブジェクトを算術式で使用できるように+-などの算術演算を定義できます。関係演算子を実装することにより,开关ステートメントや如果ステートメントなどの条件付きステートメントでオブジェクトを使用することができます。

演算子の定義方法

MATLAB演算子を実装すると,クラスのオブジェクトを処理できます。演算子を実装するには,関連するクラスメソッドを定義します。

各演算子には,それぞれ関数が関連付けられています。たとえば+演算子には関数plus.mが関連します。適切な名前をもつクラスメソッドを作成することによって,任意の演算子を実装できます。このメソッドでは,実装される演算に適した手順を実行できます。

演算子と関連付けられている関数名のリストについては,<一个href="//www.tatmou.com/jp/jp/help/matlab/matlab_oop/implementing-operators-for-your-class.html" class="intrnllnk">MATLAB演算子と関連する関数を参照してください。

演算でのオブジェクトの優先順位

ユーザー定義のクラスは,組み込みクラスよりも優先順位が高くなります。たとえば,がクラスのオブジェクトであり,pがユーザー定義クラスのオブジェクトであるとします。ユーザー定義クラスに+メソッドが存在する場合,次の2つの式はそのメソッドへの呼び出しを生成します。

Q + p p + Q

このメソッドがクラスのオブジェクトとユーザー定義クラスのオブジェクトを加算できるかどうかは,このメソッドを実装する方法に依存します。

pが異なるクラスのオブジェクトである場合,MATLABは優先順位則を適用して,使用するメソッドを決定します。

メソッドの呼び出しでのオブジェクトの優先順位には,MATLABがどのメソッドを呼び出すかを決める方法の詳細が記載されています。

演算子の優先順位

オーバーロードされた演算子は,その演算子の元のMATLAB優先順位を保持します。演算子の優先順位の詳細については,<一个href="//www.tatmou.com/jp/jp/help/matlab/matlab_prog/operator-precedence.html" class="a">演算子の優先順位を参照してください。

サンプル実装——加算可能なオブジェクト

加法器クラスは+メソッドを定義することにより,このクラスのオブジェクトの加算を実装します。加法器はオブジェクトの加算をNumericDataプロパティ値の加算として定義します。+メソッドは,NumericDataプロパティ値が加算の結果となる加法器オブジェクトを作成して返します。

また,加法器クラスは,ltメソッドを定義して”より”小の演算子(<)を実装します。ltメソッドは,各オブジェクトのNumericDataプロパティの値を比較した後に論理値を返します。

classdef加法器属性NumericData结束方法函数obj = addder (val)NumericData = val;结束函数R = + (obj1,obj2) a = double(obj1);b =双(methoda);r = add (a + b);结束函数d = double(obj) d = obj. numericdata;结束函数tf = lt(其中obj1 methoda)如果其中obj1。NumericData < methoda。NumericDatatf = true;其他的tf = false;结束结束结束结束

双コンバーターを使用して加法器オブジェクトに数値を追加し,クラスのオブジェクトで加算を実行することができます。

一个=加法器(1:10)
a = addder with properties: NumericData: [1 2 3 4 5 6 7 8 9 10]

2つのオブジェクトを加算します。

+一个
ans = addder with properties: NumericData: [2 4 6 8 10 12 14 16 18 20]

双にキャストできる任意の値をもつオブジェクトを加算します。

B = uint8(255) + a
b = add with properties: NumericData: [256 257 258 259 260 261 262 264 265]

<演算子を使用して,オブジェクト一个とオブジェクトbを比較します。

< b
ans = 1

ユーザークラスの設計を実装するために必要なエラーチェックを,ユーザークラスが提供していることを確認してください。

MATLAB演算子と関連する関数

次の表は,MATLAB演算子の関数名の一覧です。配列を扱う演算子(スカラー拡張,ベクトル化された算術演算など)を実装するには,インデックスと連結の変更も必要となる場合があります。各関数の固有の情報を確認するには,次の表のリンクを使用してください。

演算

定義するメソッド

説明

a + b

+(a, b)

2項の加算

a - b

-(a, b)

2項の減算

——一个

uminus(一)

単項マイナス

+一个

uplus(一)

単項プラス

b。*

(a, b)

要素単位の乗算

a * b

mtimes(a, b)

行列乗算

a / b

rdivide(a, b)

要素単位の右除算

一个\ b。

ldivide(a, b)

要素単位の左除算

a / b

mrdivide(a, b)

行列の右除算

一个\ b

mldivide(a, b)

行列の左除算

b。^

权力(a, b)

要素単位のべき乗

a ^

mpower(a, b)

行列のべき乗

< b

lt(a, b)

より小さい

a >

gt(a, b)

より大きい

< = b

(a, b)

以下

> = b

通用电气(a, b)

以上

~ = b

(a, b)

等しくない

a = =

情商(a, b)

等しい

a和b

(a, b)

論理和

a |

(a, b)

論理或

~一个

(一)

論理否定

d: b

a: b

结肠(a、d、b)

结肠(a, b)

コロン演算子

一个“

ctranspose(一)

複素共役転置

一个。”

转置(一)

行列転置

[b]

horzcat(a, b,…)

水平方向の連結

[一个;b]

vertcat(a, b,…)

垂直方向の連結

(s1, s2,…sn)

subsref(年代)

添字を使った参照

(s1,…,sn) = b

subsasgn(年代,b)

添字を使った代入

b (a)

subsindex(一)

添字を使ったインデックス

関連するトピック