多类构造函数Matlab

时间:2012-04-20 22:16:44

标签: oop matlab

是否可以在Matlab中定义多个类构造函数?如果是,怎么样?

4 个答案:

答案 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