我是MATLAB OOP的新手。我有一个抽象类,在我的matlab路径中定义一个抽象方法。我在名为@SubAbsClass的子文件夹中有一个名为SubAbsClass的子类。在子类中实现抽象方法后,我无法创建子类的对象。这是我的SubAbsClass实现:
classdef SubAbsClass < AbsClass
properties
O1
end
methods
function obj=SubAbsClass(a,b)
obj.O1=absMethod(a,b);
end
end
methods (Static)
function out = absMethod(a,b)
out = a + b;
end
end
end
我的抽象类实现是:
classdef AbsClass
methods(Abstract, Static)
result = absMethod
end
end
当我尝试在MATLAB路径中创建一个对象(抽象类在MATLAB路径中)时,我收到一个错误。我已经尝试了很多配置并搜索了matlab oop文档,还搜索了包含stackoverflow的web,但遗憾的是无法找到实现的示例。感谢您的帮助
>> clear all; clear classes;
>> obj=SubAbsClass(5,2)
Undefined function 'absMethod' for input arguments of type 'double'.
Error in SubAbsClass (line 11)
obj.O1=absMethod(a,b);
答案 0 :(得分:1)
在一个方法中,Matlab认为非点引用是对本地函数的调用(在类文件中的classdef
块之外定义)或者是遵循常规查找规则的Matlab路径上的某个函数
所以你需要通过构造函数中的实例Static
调用obj
方法:
methods
function obj = SubAbsClass(a,b)
obj.O1 = obj.absMethod(a,b);
end
end
对上述内容的一点警告是,非Static
方法也具有功能形式。
所以如果方法不是Static
,那么这种表示法也可以起作用
methods
function obj = SubAbsClass(a,b)
obj.O1 = absMethod(obj,a,b);
end
end
我认为,它几乎相当于点符号,虽然据说是"generally" faster(虽然是四年前)。
以下是ordinary method调用和Static
method调用的详细信息。