このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
的
や0
など、特定のサイズや型の配列を作成する MATLAB®関数がいくつかあります。ユーザー定義クラスには,オーバーロードメソッドの構文を使用する必要なしに,配列作成関数のサポートを追加できます。
任意の配列作成関数にクラスがサポートされるため,組み込みデータ型およびユーザー定義のデータ型と共有できるコードを開発できるようになります。たとえば,最初の開発期間中に,次のコード変数x
のクラスを組み込み型に設定し,その後0
を透過的にオーバーロードするユーザー定義クラスで置き換えることもできます。
cls =类(x);zArray = 0 (m, n, cls);
配列作成関数は、次の 2.つの方法で特定の型の配列を作成します。
クラス名の構文 — 配列要素の型を特定するクラス名を指定します。
プロトタイプオブジェクトの構文——配列の要素型と他の特性を決定するために関数が使用するプロトタイプオブジェクトを指定します。
以下に例を示します。
zArray = 0(2、3、“uint8”);
P = uint8([1 3 5;2 4 6]);zArray = 0(2、3、“喜欢”,p);
これらの関数に対するサポートをMyClass
という名前のクラスに追加した後,そのクラスに同様の構文が使用できるようになります。
zArray = 0(2、3、“我的班级”);
または,ユーザークラスのオブジェクトを渡します。
p=MyClass(…);zArray=0(大小(p),“喜欢”,p);
MATLABはこれらの引数を使用してユーザー クラスの適切なメソッドにディスパッチします。
以下の関数は、この種類のオーバーロードをサポートします。
既定のオブジェクトの配列を作成する場合は,コンストラクターに入力引数を指定する必要がないため,クラス名の構文を使用します。
特定のプロパティ値をもつオブジェクトの配列を作成するか、コンストラクターが他の入力を必要とする場合は、プロトタイプ オブジェクトを使用してこの情報を提供します。
クラスは、クラス名の構文とプロトタイプ オブジェクトの構文の両方をサポートすることができます。
関数符合事实的
と関数假
でクラス名の構文を実装することができます。ただし,既定ではこれらの関数はその構文をサポートしません。
使用するクラスがクラス名の構文を実装しているが、特定の関数に対するプロトタイプ オブジェクトの構文を実装しない場合でも、両方の構文を呼び出すことができます。たとえば、静的0
メソッドのみを実装する場合、次の構文を呼び出せます。
0(…“喜欢”,MyClass(…)
プロトタイプオブジェクトの構文を呼び出す場合,MATLABは最初に零级
という名前のメソッドを検索します。MATLABがメソッドを検出できなかった場合、0
静的メソッドを呼び出します。
この機能は,配列の作成にクラス名のみが必要な場合に便利です。完全な配列作成関数の構文をサポートするために,両方のメソッドを実装する必要はありません。クラス名の構文のみを実装する場合、プロトタイプ オブジェクトの構文の呼び出しは、クラス名の構文の呼び出しと同じです。
配列作成関数をサポートするには,2つの異なるメソッドを使用します。一方のメソッドはクラス名の構文を実装し,他方のメソッドはプロトタイプオブジェクトの構文を実装します。
たとえば,関数0
をサポートするには,次のようにします。
クラス名の構文を
0(…,“名称”)
静态
メソッドとして実装します。
方法(静态)作用Z = 0 (varargin)…结束结束
プロトタイプオブジェクトの構文は,
0(…“喜欢”obj)
烧焦
ベクトル“喜欢”
が名前に付加された隐藏的
メソッドとして実装します。
方法(隐藏)作用z=zerosLike(obj,varargin)。。。结束结束
構文の解釈により配列作成関数に対する特別なサポートが得られます。
次の形式の関数0
を呼び出すと,
0(…'类名称
')
次の構文でクラスの静的メソッドが呼び出されます。
ClassName.zeros(varargin{1:end-1})
次の形式の関数0
を呼び出すと,
0(…“喜欢”obj)
次の構文でクラス メソッドが呼び出されます。
zerosLike (obj,变长度输入宗量{1:end-2})
配列作成関数の入力引数には,関数が返す配列の次元や,必要に応じてその他の引数も含めることができます。一般に,メソッドがサポートしなければならない3つのケースがあります。
次元の入力引数が存在せず,結果としてスカラーが返される。以下に例を示します。
z = 0 (“我的班级”);
1.つ以上の次元が 0以下であり、結果として空配列になる。以下に例を示します。
z = 0 (2 0“我的班级”);
任意の数の有効な配列次元が配列のサイズを指定している。以下に例を示します。
z = 0(2、3、5,“我的班级”);
配列作成関数がクラスメソッドを呼び出す際,クラス名またはリテラル“喜欢”
を除く,入力引数とオブジェクト変数をメソッドに渡します。メソッドは次のシグネチャを使って実装できます。
“クラス名“メソッドの場合:0(变长度输入宗量)
“就像を指定したプロトタイプオブジェクト”メソッドの場合:0 (obj,变长度输入宗量)
颜色
クラスは,RGB
やHSV
など,特定の色空間における色を表します。クラス名メソッドの実装とプロトタイプオブジェクトメソッドの実装の説明では,オーバーロードメソッドを実装するための基本としてこのクラスを使用しています。
classdef颜色性质= [0,0,0] [0,0,0“RGB”结束方法作用obj =颜色(cSpace、价值观)如果Nargin > 0 obj。色彩= cSpace; obj.ColorValues = values;结束结束结束结束
関数0
は,最後の类名称
烧焦
ベクトルを取り除き、それを使用して颜色
クラスの静的メソッドの呼び出しを作成します。静的メソッドに渡される引数は,配列次元引数です。
以下に,颜色
クラスに対する0
メソッドの実装を示します。この実装により,以下が実行されます。
0
メソッドを静态
として定義します(必須)。
0
の呼び出しに次元の引数がない場合はスカラー颜色
オブジェクトを返します。
0
の呼び出しが 0の次元引数をもつ場合は空配列を返します。
既定の颜色
オブジェクトの配列を返します。関数雷普马特
を使用して,0
の呼び出しによって指定された次元の配列を作成します。
classdef颜色...方法(静态)作用z = 0(变长度输入宗量)如果(输入参数个数= = 0)% 0(颜色)z =颜色;elseif任何([变长度输入宗量{}):< = 0)%用于任何维度<= 0的零z = Color.empty(变长度输入宗量{:});其他的% 0 (m, n,…,“颜色”)%使用属性默认值z = repmat(颜色、变长度输入宗量{:});结束结束结束结束
0
メソッドは,このアプリケーションに適しているColorValues
プロパティの既定値を使用します。たとえば,的
メソッドの実装により,ColorValues
プロパティを[1,1,1]
に設定できます。
次の目的を達成するために関数兰迪
をオーバーロードすると仮定します。
各ColorValue
プロパティを1から指定最大値までの範囲の値(たとえば1 ~ 255)を取る1行3列の配列として定義する。
スカラー、空多次元の配列サイズに対応している。
それぞれ無作為なColorValues
により,指定された次元の颜色
オブジェクトの配列が返される。
classdef颜色...方法(静态)作用r =兰迪(变长度输入宗量)如果(输入参数个数= = 0)%对于randi('ClassName'))r =颜色(“RGB”兰迪(255年,[1,3]));elseif任何([变长度输入宗量{2}结束):< = 0)% For randi with any dimension <= 0r = Color.empty(变长度输入宗量{2:结束});其他的%对于randi(max,m,n,,'ClassName')如果Numel ([varargin{:}]) < 2错误('输入参数不足')结束dim =[变长度输入宗量{2}结束):;r = 0(变暗,“颜色”);为k = 1:prod(dims) r(k) = Color(“RGB”兰迪(变长度输入宗量{1},[1,3]));结束结束结束结束结束
“喜欢”を指定したプロトタイプオブジェクトなど,オブジェクトの配列を返すメソッドの目的は,クラスの必要条件によって異なります。颜色
クラスの場合、zeroLike
メソッドはプロトタイプオブジェクトの色彩
プロパティ値をもつオブジェクトを作成しますが、ColorValues
はすべて 0になります。
以下に,颜色
クラスを対象とする零级
メソッドの実装を示します。この実装により,以下が実行されます。
零级
メソッドを隐藏的
として定義します。
関数0
の呼び出しに次元の引数がない場合はスカラー颜色
オブジェクトを返します。
関数0
の呼び出しが負または 0の次元引数をもつ場合は空配列を返します。
関数0
の呼び出しによって指定された次元の颜色
オブジェクトの配列を返します。
classdef颜色...方法(隐藏)作用z = zerosLike (obj,变长度输入宗量)如果纳金==1%为0(‘喜欢’,obj)cSpace = obj.ColorSpace;z =颜色;z.ColorSpace = cSpace;elseif任何([变长度输入宗量{}):< = 0)%用于任何维度<= 0的零z = Color.empty(变长度输入宗量{:});其他的% 0 (m, n,…,“喜欢”,obj)如果~ isscalar (obj)错误('Prototype对象必须是标量')结束obj =颜色(obj。色彩,zeros(1,3,“喜欢”,obj.ColorValues);z=repmat(obj,varargin{:});结束结束结束结束
以下に,オーバーロードされたメソッドのある颜色
クラス定義を示します。
メモ
実際颜色
クラスには、エラー チェック、色空間変換などが必要です。この非常に単純化されたバージョンは、オーバーロードされたメソッドの実装を表しています。
classdef颜色性质= [0,0,0] [0,0,0“RGB”结束方法作用obj =颜色(cSpace、价值观)如果Nargin > 0 obj。色彩= cSpace; obj.ColorValues = values;结束结束结束方法(静态)作用z = 0(变长度输入宗量)如果(输入参数个数= = 0)% 0('名称')z =颜色;elseif任何([变长度输入宗量{}):< = 0)%用于任何维度<= 0的零z = Color.empty(变长度输入宗量{:});其他的%对于零(m,n,…,'ClassName')%使用属性默认值z = repmat(颜色、变长度输入宗量{:});结束结束作用r =兰迪(变长度输入宗量)如果(输入参数个数= = 0)%对于randi('ClassName'))r =颜色(“RGB”兰迪(255年,[1,3]));elseif任何([变长度输入宗量{2}结束):< = 0)% For randi with any dimension <= 0r = Color.empty(变长度输入宗量{2:结束});其他的%对于randi(max,m,n,,'ClassName')如果Numel ([varargin{:}]) < 2错误('输入参数不足')结束dim =[变长度输入宗量{2}结束):;r = 0(变暗,“颜色”);为k = 1:prod(dims) r(k) = Color(“RGB”兰迪(变长度输入宗量{1},[1,3]));结束结束结束结束方法(隐藏)作用z = zerosLike (obj,变长度输入宗量)如果纳金==1%为0(‘喜欢’,obj)cSpace = obj.ColorSpace;z =颜色;z.ColorSpace = cSpace;elseif任何([变长度输入宗量{}):< = 0)%用于任何维度<= 0的零z = Color.empty(变长度输入宗量{:});其他的% 0 (m, n,…,“喜欢”,obj)如果~ isscalar (obj)错误('Prototype对象必须是标量')结束obj =颜色(obj。色彩,zeros(1,3,“喜欢”,obj.ColorValues);z=repmat(obj,varargin{:});结束结束结束结束