是否可以在Matlab中定义多个类构造函数?如果是,怎么样?
答案 0 :(得分:27)
每个类都有一个构造函数。但是......构造函数可以接受任何数量和类型的参数,包括基于varargin
的参数。
因此,要在Java中提供默认第三个参数的选项,您可以编写类似这样的内容(基于java documentation的示例):
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 :(得分:4)
每个类只有一个构造函数,每个.m文件只能包含一个类定义。
如果您希望根据输入略有不同的类,则可以使用定义类方法可识别的开关的属性。如果您希望根据输入使用非常不同的类,则可以创建一个generateClass
- 函数,该函数将调用在不同文件中定义的一个或另一个类。当然,如果这些不同的类具有许多常用方法和属性,则可以将它们创建为公共超类的子类。
答案 2 :(得分:4)
Pursuit的答案有效,但不熟悉该功能的用户无法查看需要多少参数或它们的用途。我会推荐这个:
methods (Access = public)
function self = Bicycle(startCadence, startSpeed, startGear)
if nargin>2
self.gear = startGear;
else
self.gear = 1;
end
self.cadence = startCadence;
self.speed = startSpeed;
end
end
如果你现在输入“自行车”(等等,你至少可以看到三个参数。第二种可能性虽然没有显示。似乎可能(例如情节)但我不知道如何做到这一点。 / p>
答案 3 :(得分:2)
没有。与其他语言相比,OOP matlab中的构造函数非常有限。文档AFAIK中没有明确说明您可以拥有多个构造函数,但它在整个文档中以单数形式引用类的构造函数。
http://www.mathworks.co.uk/help/techdoc/matlab_oop/brd2m9e-1.html