Main Content

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

メソッドの呼び出しでのオブジェクトの優先順位

オブジェクトの優先順位

オブジェクトの優先順位が定まると、MATLAB® は、与えられた状況で、可能な多くのバージョンからいずれの演算子または関数を呼び出すかを決めることができます。

たとえば、次の式を考えます。

objectA + objectB

通常、オブジェクトは等しい優先順位をもち、左端のオブジェクトに関連付けられたメソッドが呼び出されます。ただし、次の 2 つの例外があります。

  • classdef 構文で定義されたクラスは、次の MATLAB クラスよりも優先される。

    doublesingleint64uint64int32uint32int16uint16int8uint8charstringlogicalcellstruct、および function_handle

  • classdef 構文で定義されたクラスは、InferiorClasses 属性を使用して他のクラスに対する相対的な優先順位を指定可能。

クラスによる多項式の表現の例について考えてみましょう。DocPolynom クラスは、DocPolynom オブジェクトの加算を可能とする、plus メソッドを定義します。次のように、オブジェクト p を与えます。

p = DocPolynom([1 0 -2 -5])
p =
    x^3-2*x-5

次の式

1 + p
ans =
    x^3-2*x-4

は、DocPolynom plus メソッドを呼び出します(これは、double の 1 を DocPolynom オブジェクトに変換してから、2 つの多項式の加算を実装します)。DocPolynom クラスは、組み込み double クラスより優先されます。

優先順位の定義

クラス属性に下位クラスをリストすることで、classdef 構文によって定義されたクラスの相対的優先順位を指定できます。InferiorClasses プロパティは、優先順位の階層構造の中で、あるクラスの優先順位を他のクラスよりも下位に設定します。classdef ステートメントで InferiorClasses プロパティを定義します。

classdef (InferiorClasses = {?class1,?class2}) myClass

この属性は、リストされたクラスの順序で定義されている、クラスの相対的な優先順位を決めます。

階層構造の中の位置

優先順位の階層構造の中で objectAobjectB よりも上位にある場合、次の式

objectA + objectB

@classA/plus.m を呼び出します。逆に、objectB が優先順位の階層構造の中で objectA よりも上位にある場合、MATLAB では @classB/plus.m が呼び出されます。

関連するトピック