継承した組み込みメソッドの動作
double のサブクラス化
組み込みクラスで使用されるほとんどの組み込み関数は、実際、組み込みクラスのメソッドです。たとえば、double
クラスおよび single
クラスは、算術演算、インデックス付け、行列演算などを実行するためのいくつかのメソッドを定義します。これらの組み込みクラスのメソッドはすべて、組み込みクラスのサブクラスを取り扱います。
double
をサブクラス化することにより、MATLAB® の組み込みクラスで定義されているメソッドを実装せずに、ユーザー クラスで機能を使用できるようになります。
DocSimpleDouble
クラスは組み込みの double
クラスをサブクラス化します。
classdef DocSimpleDouble < double methods function obj = DocSimpleDouble(data) if nargin == 0 data = 0; end obj = obj@double(data); end end end
DocSimpleDouble
クラスのインスタンスを作成します。
sc = DocSimpleDouble(1:10)
sc = 1x10 DocSimpleDouble: double data: 1 2 3 4 5 6 7 8 9 10
sum
のような、double
クラスから継承され double データを扱うメソッドを呼び出します。sum
は double
を返し、したがって、クラス double
の display
メソッドを使用します。
sum(sc)
ans = 55
double の配列と同様に、sc
にインデックスを付けます。返される値はこのサブクラスのクラスです。
a = sc(2:4)
a = 1x3 DocSimpleDouble: double data: 2 3 4
インデックス付きの代入は組み込みクラスと同様に機能します。返される値はこのサブクラスのクラスです。
sc(1:5) = 5:-1:1
sc = 1x10 DocSimpleDouble: double data: 5 4 3 2 1 6 7 8 9 10
データ要素の順序を変更するメソッドを呼び出すと、データを操作しますが、サブクラスのオブジェクトを返します。
sc = DocSimpleDouble(1:10); sc(1:5) = 5:-1:1; a = sort(sc)
a = 1x10 DocSimpleDouble: double data: 1 2 3 4 5 6 7 8 9 10
組み込みデータ値メソッド
サブクラスのオブジェクトで組み込みデータ値メソッドを呼び出すと、MATLAB はサブクラス オブジェクトのスーパークラス部分をメソッドへの入力として使用します。返される値のクラスは組み込みクラスと同じになります。以下に例を示します。
sc = DocSimpleDouble(1:10); a = sin(sc); class(a)
ans = double
組み込みデータ整理メソッド
このグループの組み込みメソッドは、入力引数配列の並べ替えと形を変更します。これらのメソッドは、サブクラス オブジェクトのスーパークラスの部分を処理しますが、サブクラスと同じ型のオブジェクトを返します。
sc = DocSimpleDouble(randi(9,1,10))
sc = DocSimpleDouble(randi(9,1,10)) sc = 1x10 DocSimpleDouble: double data: 6 1 8 9 7 7 7 4 6 2
b = sort(sc)
b = 1x10 DocSimpleDouble: double data: 1 2 4 6 6 7 7 7 8 9
このグループのメソッドには、以下のものがあります。
組み込みインデックス メソッド
インデックス付けを使用して組み込みクラスから継承するオブジェクトを参照すると、サブクラスが定義したプロパティではなく組み込みデータのみが参照されます。サブクラスがプロパティを定義する場合は、サブクラスが既定の subsref
メソッドをオーバーライドしない限り、インデックス付き参照は作成できません。
たとえば、DocSimpleDouble
サブクラス オブジェクトの要素 2
にインデックスを付けると、ベクトルの 2 番目の要素を返します。
sc = DocSimpleDouble(1:10); a = sc(2)
a = DocSimpleDouble double data: 2
インデックス付けの操作から返される値は、サブクラスのオブジェクトです。
DocSimpleDouble
オブジェクトの 2 番目の要素に新しい値を割り当てると、スーパークラスのデータだけが処理されます。
sc(2) = 12
sc = 1x10 DocSimpleDouble: double data: 1 12 3 4 5 6 7 8 9 10
subsref
メソッドは、メソッドに対するドット表記も実装します。
組み込み連結メソッド
組み込み関数は、関数 horzcat
、vertcat
、cat
を使用して、連結を実装します。同じ型のサブクラス オブジェクトでこれらの関数を使用すると、MATLAB ではスーパークラスのデータが新しい 1 つのオブジェクトに連結されます。たとえば、DocSimpleDouble
クラスのオブジェクトを連結できます。
sc1 = DocSimpleDouble(1:10); sc2 = DocSimpleDouble(11:20); [sc1,sc2]
ans = 1x20 DocSimpleDouble: double data: Columns 1 through 13 1 2 3 4 5 6 7 8 9 10 11 12 13 Columns 14 through 20 14 15 16 17 18 19 20
[sc1;sc2]
ans = 2x10 DocSimpleDouble: double data: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
3 番目の次元について 2 つのオブジェクトを連結します。
c = cat(3,sc1,sc2)
c = 1x10x2 DocSimpleDouble: double data: (:,:,1) = 1 2 3 4 5 6 7 8 9 10 (:,:,2) = 11 12 13 14 15 16 17 18 19 20
組み込みクラスのサブクラスでプロパティが定義されている場合、サブクラスのオブジェクトは連結できません。異なるオブジェクトのプロパティをどう結合するかを決定する方法はありません。ただし、サブクラスで独自の horzcat
メソッドと vertcat
メソッドを定義すれば、サブクラスにとって意味のある方法で連結を行うことができます。