23

Matlabで複数のクラスコンストラクターを定義することは可能ですか? はいの場合、どのように?

4

4 に答える 4

31

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

したがって、Java でデフォルトの 3 番目の引数のオプションを提供するには、次のように記述できます ( Java ドキュメントに基づく例)。

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;
}

Matlabでは、次のように書くことができます

classdef Bicycle < handle
    properties (Access=public)
        gear
        cadence
        speed
    end
    methods (Access = public)
        function self = Bicycle(varargin)
            if nargin>2
                self.gear = varargin{3};
            else
                self.gear = 1;
            end
            self.cadence = varargin{1};
            self.speed = varargin{2};
        end
    end
end
于 2012-04-21T00:23:38.083 に答える
4

各クラスにはコンストラクターが1つだけあり、各.mファイルに含めることができるクラス定義は1つだけです。

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

于 2012-04-20T22:40:08.693 に答える
2

いいえ。OOPmatlabのコンストラクターは、他の言語と比較して非常に制限されています。ドキュメントAFAIKには、複数のコンストラクターを持つことができると明示的には記載されていませんが、ドキュメント全体で単数形のクラスのコンストラクターを指します。

https://www.mathworks.com/help/matlab/matlab_oop/class-constructor-methods.html

于 2012-04-20T22:40:04.783 に答える