реализация абстрактных методов в Matlab

Я новичок в MATLAB ООП. У меня есть абстрактный класс, определяющий абстрактный метод в моем пути 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);

person hb_m    schedule 15.06.2015    source источник


Ответы (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

Что, я думаю, почти эквивалентно точечной нотации, хотя было сказано, что это "обычно" быстрее (правда, это было четыре года назад).

Вот подробности для вызова обычного метода и Static.

person TroyHaskin    schedule 15.06.2015