2015-06-15 3 views
0

Я новичок в MATLAB OOP. У меня есть абстрактный класс, определяющий абстрактный метод в моем пути matlab. У меня есть подкласс под именем SubAbsClass в подпапке с именем @SubAbsClass. Я не могу создать объект подкласса после реализации абстрактного метода в подклассе. Вот моя реализация SubAbsClass:реализация абстрактных методов в matlab

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

ответ

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 призыв.

Смежные вопросы