我正在尝试在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
答案 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 ++不同,您只能为每个文件定义一个方法。它真的最终变得一团糟。
另见: