Matlabで複数のクラスコンストラクターを定義することは可能ですか? はいの場合、どのように?
4 に答える
各クラスには 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
各クラスにはコンストラクターが1つだけあり、各.mファイルに含めることができるクラス定義は1つだけです。
入力によってわずかに異なるクラスが必要な場合は、クラスメソッドによって認識されるスイッチを定義するプロパティを使用できます。入力に応じて非常に異なるクラスが必要な場合はgenerateClass
、異なるファイルで定義されているクラスのいずれかを呼び出す関数を作成できます。もちろん、これらの異なるクラスに多くの共通のメソッドとプロパティがある場合は、両方を共通のスーパークラスのサブクラスとして作成できます。
いいえ。OOPmatlabのコンストラクターは、他の言語と比較して非常に制限されています。ドキュメントAFAIKには、複数のコンストラクターを持つことができると明示的には記載されていませんが、ドキュメント全体で単数形のクラスのコンストラクターを指します。
https://www.mathworks.com/help/matlab/matlab_oop/class-constructor-methods.html