Matlab以优雅的方式为OOP定义类函数

时间:2013-12-05 15:37:13

标签: matlab oop

我正在尝试在Matlab OOP中实现一个小的示例函数。

正常运作的代码是:

classdef Cat < handle
properties
    meowCount = 0; 
end

methods 
    function obj = Cat()            % all initializations, calls to base class, etc. here,
    end

    function Meow(obj)
        disp('meowww'); 
        obj.meowCount = obj.meowCount + 1;
    end
end    
end

我想创建类似于C ++的以下类型的东西,因为我的真实生活函数定义非常大,我不想混淆我的类定义:

classdef Cat < handle
properties
    meowCount = 0; 
end

methods 
    function obj = Cat()            % all initializations, calls to base class, etc. here,
    end

    function Meow(obj);
end    
end


%%

function Cat::Meow(obj)
   disp('meowww'); 
   obj.meowCount = obj.meowCount + 1;
end

所以,基本上在课堂外编写函数Meow的定义。我如何完成上述变更?

要使用工作的第一个版本,您可以使用以下内容:

C = Cat;
C.meowCount
C.Meow

3 个答案:

答案 0 :(得分:3)

创建名为@Cat的文件夹。

@Cat内,放入以下文件:

<强> Cat.m

classdef Cat < handle
    properties
        meowCount = 0; 
    end

    methods 
        function obj = Cat()
        end

        Meow(obj) % this is optional, and just indicates the function signature

    end    
end

<强> Meow.m

function Meow(obj)
    disp('meowww'); 
    obj.meowCount = obj.meowCount + 1;
end

移出@Cat文件夹,并确保它(或其父文件夹)在您的路径上。然后试试你的例子。

如果你使用@文件夹来包含你的类,大多数方法(虽然不是构造函数,而不是属性get / set方法)可以移动到外部文件。

如果需要,可以在主classdef文件中包含一个没有实现的函数签名。这有时是可选的,但如果您希望将方法的访问级别更改为默认值,则必须使用。

答案 1 :(得分:0)

有两种方法可以定义类的方法。更新,更便携的方法是在同一个classdef文件中定义它们。您还可以将方法编写为单独的M文件函数和put them in a @MyClass folder。请注意一些方法must be in the classdef file。您仍然可以通过辅助函数将单独的文件方法定义为static和私有。这是一个黑客攻击,这就是为什么将所有内容放在classdef文件中是个好主意,除非你有一个非常大的项目。

答案 2 :(得分:0)

在classdef文件中处理混乱的最佳方法是使用代码折叠。您可以折叠单个方法和整个方法块。通过这种方式,您可以通过在相同的方法块中将相关方法组合在一起,轻松地将classdef文件组织为尽可能整洁。折叠当时未使用的任何方法/块。

此外,您可以使用“编辑器功能区”选项卡中的“转到”按钮选择要查看的特定方法(如果它们都在同一文件中定义)。

首先在单独的文件中编写方法似乎是一个很好的解决方案,但是如果你有一个包含许多方法的类,那么一次打开许多文件会变得非常麻烦。与C ++不同,您只能为每个文件定义一个方法。它真的最终变得一团糟。

另见: