私はMatlab 2009a(新しいHG2のずっと前)であなたの例を試しましたが、動作はあなたが説明したものとまったく同じです.
classes
Matlabでの作業方法に少し間違っているようです。
基本的に、プロパティのデフォルト値に任意のタイプの数値/テキスト値を割り当てることができます。
properties
myProp %// No default value assigned
myProp = 'some text';
myProp = sin(pi/12); %// Expression returns default value
end
ただし、ハンドルを何かに割り当てないでください
myProp1 = figure ; %// all the object of this class will always point to this same figure
myProp2 = plot([0 1]) ; %// all the object of this class will always point to this same line object
そうしないと、クラスのすべてのオブジェクト (新しく作成されたものも含む) が、最初のオブジェクトがインスタンス化されたときに一度だけ作成された同じ実際のハンドルを指します。
クラスの新しいオブジェクトを作成するたびに異なるグラフィック オブジェクト ( figure ) を生成する場合は、クラス コンストラクターで生成する必要があります。
したがって、クラスは次のようになります。
classdef mytestclass
properties (SetAccess = private) %// you might not want anybody else to modify it
hFig
end
methods
function obj = mytestclass()
obj.hFig = handle( figure ) ; %// optional. The 'handle' instruction get the actual handle instead of a numeric value representing it.
end
end
end
ヘルプから:
プロパティを一意の値に初期化する
MATLAB は、クラス定義が読み込まれるときに一度だけ、指定された既定値にプロパティを割り当てます。したがって、
プロパティ値をハンドル クラス コンストラクターで初期化すると、MATLAB はこのコンストラクターを 1 回だけ呼び出し、すべてのインスタンスが同じハンドル オブジェクトを参照します。オブジェクトを作成するたびにプロパティ値をハンドル オブジェクトの新しいインスタンスに初期化する場合は、コンストラクターでプロパティ値を割り当てます。