2012-04-20 4 views

答えて

25

各クラスには1つのコンストラクタがあります。しかし、コンストラクタは、vararginに基づく引数を含め、任意の数と型の引数を受け入れることができます。

だから、あなたはこのような何か(java documentationに基づい例)を書くことができるJavaでデフォルト三番目の引数の選択肢を提供するために:MATLABで

public Bicycle(int startCadence, int startSpeed, int startGear) { 
    gear = startGear; 
    cadence = startCadence; 
    speed = startSpeed; 
} 
public Bicycle(int startCadence, int startSpeed) { 
    gear = 1; 
    cadence = startCadence; 
    speed = startSpeed; 
} 

をあなたは

methods (Access = public) 
    function self = Bicycle(varargin) 
     if nargin>2 
      gear = varargin{3}; 
     else 
      gear = 1; 
     end 
     cadence = varargin{1}; 
     speed = varargin{2};   
    end 
end 
+2

if文の中に "self"を作成することはできないので、最初に "self"に何かを割り当てるときはif節の前後に来なければなりません。 – Jonas

+0

はこの解決策に終わった:) tnx! – bsmca

2

いいえ。OOP matlabのコンストラクタは他の言語に比べて非常に制限されています。ドキュメンテーションAFAIKでは、複数のコンストラクタを持つことはできますが、ドキュメンテーション全体を通してクラスのコンストラクタを単数で参照することは明示的には言及されていません。

http://www.mathworks.co.uk/help/techdoc/matlab_oop/brd2m9e-1.html

4

各クラスには、唯一の1つのコンストラクタを持ち、それぞれの.mファイルは、唯一のクラス定義を含めることができます。

入力に応じてわずかな違いがあるクラスを使用する場合は、クラスメソッドで認識されるスイッチを定義するプロパティを使用できます。入力に応じて非常に異なるクラスを使用する場合は、generateClass関数を作成して、異なるファイルで定義されたクラスを呼び出すことができます。もちろん、これらの異なるクラスに共通のメソッドとプロパティがたくさんある場合は、両方を共通のスーパークラスのサブクラスとして作成できます。

+0

元のポスターに注意してください:実際に継承には本当に注意してください。あなたにはたくさんのロープが掛けられています。 – learnvst

+0

同じクラスで、初期化のプロセスだけが異なります。これらの2つの方法でインスタンスを構築するために必要なすべてのパラメータを渡すと思います。 、1ヶ月ビルド方法を定義するreパラメータ。汚いしかし速い..悲しい、私の解決策はとても理解できていた。あなたの恥をあなたに! – bsmca

+0

@bsmca:ビルドする2つの異なる方法を実装する(静的な)メソッドをいつでも定義できます。そして、それらを共通コンストラクタから呼び出すことができます。これらのメソッドの前でも後でもオブジェクトを作成するようにしてください。 – Jonas

2

書くことができます追求の答えが働いていますが、その機能に慣れていないユーザーは、必要な引数の数やそれらが何であるかを知ることができません。 。。あなたは今、「自転車(」あなたは、少なくとも3つの引数を見ることができる第二の可能性はいえ示されていないことは可能と思われる待つ(プロット用など)が、私ドンを入力した場合

methods (Access = public) 
    function self = Bicycle(startCadence, startSpeed, startGear) 
     if nargin>2 
      gear = startGear; 
     else 
      gear = 1; 
     end 
     cadence = startCadence; 
     speed = startSpeed;   
    end 
end 

:私はこれをお勧めします

+0

それは実際にあなたのために働きますか? (2014aとbで)すべての引数を指定しないと、 "入力引数が不十分です"(MATLAB:minrhs)という結果になります。これはコンストラクタ/クラスメンバではなく "フリー"関数で機能するようです。 –

関連する問題