23

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

4

4 回答 4

31

每个类都有一个构造函数。但是......构造函数可以接受任意数量和类型的参数,包括那些基于varargin.

因此,要在 Java 中提供默认第三个参数的选项,您可以编写如下内容(基于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

每个类只有一个构造函数,每个 .m 文件只能包含一个类定义。

如果您希望类根据输入略有不同,您可以使用定义类方法识别的开关的属性。如果你想根据输入有非常不同的类,你可以创建一个generateClass函数来调用不同文件中定义的一个或另一个类。当然,如果这些不同的类有很多共同的方法和属性,您可以将它们创建为共同超类的子类。

于 2012-04-20T22:40:08.693 回答
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

如果您现在键入“Bicycle(”并等待,您至少可以看到三个参数。但没有显示第二种可能性。这似乎是可能的(例如情节),但我不知道该怎么做。

于 2014-10-15T07:25:56.883 回答
2

不。与其他语言相比,OOP matlab 中的构造函数非常受限。在文档 AFAIK 中没有明确说明您可以有多个构造函数,但它在整个文档中以单数形式指代类的构造函数。

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

于 2012-04-20T22:40:04.783 回答