【问题标题】:implementing abstract methods in matlab在matlab中实现抽象方法
【发布时间】:2015-08-31 12:42:59
【问题描述】:

我是 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 在内的网络,但不幸的是找不到要实现的示例。感谢您的帮助

>> 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);

【问题讨论】:

    标签: matlab oop methods subclass abstract


    【解决方案1】:

    在方法中,Matlab 认为非点引用是对局部函数的调用(在类文件中的 classdef 块之外定义)或遵循通常查找规则的 Matlab 路径上某处的函数。

    所以需要在构造函数中通过实例obj调用Static方法:

    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 调用的详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      • 2013-05-30
      • 2016-08-13
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      相关资源
      最近更新 更多