主要内容

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

オブジェクトの動作

2つのコピーの動作

MATLAB®の基本的なオブジェクトには,ハンドルと値の2種類があります。

"値"オブジェクトは,コピー操作においてMATLAB基本型のように動作します。コピーは,それぞれ独立した値です。1つのオブジェクトに操作を実行しても,そのオブジェクトのコピーには影響しません。

“ハンドル”オブジェクトは,ハンドル変数により参照されます。ハンドル変数のコピーは同じオブジェクトを参照します。ハンドルオブジェクトに対して実行する操作は,そのオブジェクトを参照するすべてのハンドル変数から参照することができます。

ハンドルオブジェクトのコピー

クラスを定義する場合で,ハンドルオブジェクトのコピーをサポートするときは,ハンドルクラスのコピーの実装を参照してください。

値オブジェクトのコピーの動作

MATLABの数値変数は値オブジェクトです。たとえば,一个を変数bにコピーしても,両方の変数は互いに独立です。一个の値を変更してもbの値は変わりません。

= 8;b =一个;

一个に再代入します。bは変わりません。

= 6;b
b = 8

一个を変更しても,bには影響しません。

清晰的一个b
b = 8

値オブジェクトのプロパティ

値オブジェクトにプロパティとして格納されている値のコピーの動作は,数値変数と同様です。たとえば,vobj1は,プロパティ一个をもつ値オブジェクトであるとします。

vobj1。= 8;

vobj1vobj2にコピーした後vobj1のプロパティ一个の値を変更しても,コピーされたオブジェクトのプロパティの値vobj2.aには影響しません。

vobj2 = vobj1;vobj1。一个= 5; vobj2.a
ans = 8

ハンドルオブジェクトのコピーの動作

次に示すのは,数据というプロパティを定義するHdClassというハンドルクラスです。

classdefHdClass <处理属性数据结束方法函数obj = HdClass (val)如果Nargin > 0 obj。数据= val;结束结束结束结束

このクラスのオブジェクトを作成します。

hobj1 = HdClass (8)

このステートメントはセミコロンで終わらないので,MATLABによってオブジェクトに関する情報が表示されます。

hobj1 = HdClass with properties

変数hobj1は,作成されたオブジェクトを参照するハンドルです。hobj1hobj2にコピーすると,同じオブジェクトを参照する別のハンドルになります。

hobj2 = hobj1
hobj2 = HdClass with properties

ハンドルはオブジェクトを参照するので,ハンドルをコピーすると新しい変数名へハンドルがコピーされますが,ハンドルは引き続き同じオブジェクトを参照します。たとえば,hobj1がプロパティ数据をもつハンドルオブジェクトだとします。

hobj1。数据
ans = 8

hobj1数据プロパティの値が変化し,コピーされたオブジェクトの数据プロパティの値も変化します。

hobj1。数据= 5; hobj2.Data
ans = 5

hobj2hobj1は同じオブジェクトに対するハンドルなので,コピーであるhobj2を変更すると,ハンドルhobj1を介してアクセスするデータも変化します。

hobj2。数据= 17; hobj1.Data
ans = 17

ハンドル変数の再代入

ハンドル変数を再代入すると,他のMATLAB変数を再代入する場合と同じ結果になります。オブジェクトを作成してhobj1に代入するには,次のようにします。

hobj1 = HdClass (3.14);

hobj1では,以前に参照していた同じオブジェクトではなく,新規のオブジェクトが参照されます。なお,hobj2では引き続き以前のオブジェクトが参照されます。

ハンドル変数のクリア

ワークスペースからハンドルをクリアすると,MATLABはその変数を削除しますが,別のハンドルによって参照されるオブジェクトは削除しません。ただし,オブジェクトへの参照がない場合,MATLABはオブジェクトを破棄します。

同じオブジェクトを参照するhobj1hobj2が与えられた場合に,オブジェクトに影響せずにいずれかのハンドルをクリアすることができます。

hobj1。数据= 2^8; clear hobj1 hobj2
hobj2 = HdClass属性:Data: 256

hobj1hobj2の両方をクリアすると,オブジェクトに対する参照がなくなります。MATLABはオブジェクトを破棄し、そのオブジェクトで使用されるメモリを解放します。

ハンドルオブジェクトの削除

任意数のハンドルで参照されるオブジェクトを削除するには,删除を使用します。同じオブジェクトを参照するhobj1hobj2が与えられた場合に,いずれかのハンドルを削除します。MATLABはオブジェクトを削除します。

hobj1 = HdClass (8);hobj2 = hobj1;删除(hobj1) hobj2
删除HdClass的句柄

ワークスペースから変数を削除するには,清晰的を使用します。

オブジェクトの変更

オブジェクトを関数に渡すと,MATLABはオブジェクトのコピーを関数ワークスペースに渡します。関数がオブジェクトを変更する場合、MATLAB は関数ワークスペース内のオブジェクトのコピーのみを変更します。次のような場合、ハンドル クラスと値クラス間でのコピー動作の違いは重要です。

  • 値オブジェクト——関数は,オブジェクトの変更されたコピーを返さなければなりません。呼び出し側ワークスペースのオブジェクトを変更するには,関数の出力を同じ名前の変数に代入します。

  • ハンドルオブジェクト——関数ワークスペース内のコピーは同じオブジェクトを参照します。したがって,関数は変更されたオブジェクトを返す必要はありません。

ハンドルクラスまたは値クラスの判定

オブジェクトがハンドルオブジェクトかどうかを判定するには,関数isaを使用します。objがあるクラスのオブジェクトの場合,次のステートメントはobjがハンドルかどうかを判定します。

isa (obj,“处理”

たとえば,容器。地图クラスは,ハンドルオブジェクトを作成します。

hobj =容器。地图({“红袜队”“洋基},{“波士顿”“纽约”});isa (hobj“处理”
ans = 1

hobj容器。地图オブジェクトです。

isa (hobj containers.Map)
ans = 1

hobjのクラスをクエリすると容器。地图オブジェクトであることがわかります。

类(hobj)
ans =容器。地图

関数はオブジェクトの特定のクラスを返します。

関連するトピック