2013-12-11 2 views
2

Я новичок в объектно-ориентированном программировании в Matlab, и у меня есть некоторые проблемы с изменением некоторых моих свойств изнутри моего конструктора классов. Мой класс выглядит что-то вродеКак обновить свойство из конструктора класса matlab

classdef kENot 

properties 
    Sys; 

end 
methods 
     function obj=kENot(Sys) 
      %Constructor 
      obj.Sys=Sys;   
      obj.eyePrime 

     end 

     function obj=eyePrime(obj) 
      obj.Sys.IPrime=5 
     end 

end 
end 

Тогда из COMAND линии я называю этот конструктор, как

Sys.Iprime=4; 
classObj=kENot(Sys); 
disp(classObj.Sys.Iprime) 

И печатает 4. MATLAB Я хочу, для значения classObj.Sys.Iprime для обновления во время вызов obj.eyePrime в конструкторе, но этого не происходит. Есть предположения?

ответ

1

Первое, что я думаю, что внутри obj.Sys.IPrime=5 вы должны иметь obj.Sys.Iprime=5, то есть маленький 'p'. Во-вторых, я думаю, вам нужно сделать класс handle.

classdef kENot < handle 
    properties 
     Sys; 

    end 
    methods 
      function obj=kENot(Sys) 
       %Constructor 
       obj.Sys=Sys;   
       obj.eyePrime(); 
      end 

      function obj = eyePrime(obj)   
       obj.Sys.Iprime=5; 
      end 

    end 
end 
+0

Спасибо! Не могли бы вы прояснить, что вы подразумеваете под маркой make? В чем разница между «classdef kENot user3089536

+0

Это сработало кстати, я просто не понимаю, почему ... – user3089536

+0

Хороший улов в прописном или строчном вопросе. Можете ли вы объяснить, почему вам нужно ' Floris

2

Для полноты определения класса ручек не единственный способ решить эту проблему.

До тех пор, пока kENot не является классом дескриптора, вам всегда нужно назначить вывод методов, которые изменяют объект на переменную, содержащую экземпляр. В вашей текущей реализации eyePrime возвращает измененный obj. Но вы не используете возвращаемое значение.

Таким образом, вы можете изменить свой конструктор:

function obj=kENot(Sys) 
    %Constructor 
    obj.Sys=Sys;   
    obj = obj.eyePrime(); 
end 

Конечно, это довольно неудобно синтаксис по сравнению со всеми другими объектно-ориентированных языков программирования, и это, вероятно, почему ручка классы благоприятствования здесь.

Как обычно, есть довольно хороший от MathWorks справки о на этом:

http://www.mathworks.de/de/help/matlab/matlab_oop/comparing-handle-and-value-classes.html

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