Matlab - 构造函数不会初始化成员值

时间:2015-06-21 09:57:22

标签: matlab variables interface constructor

亲爱的社区,

我已经在谷歌和论坛中找到了一些有趣的帖子。但最终我仍然没有得到它。所以,我将在这里发布问题。我知道在Matlab中已经实现了get / Set方法,但我正在使用对象,因此我不明白在哪里实现它们。

整体结构:

+Measurement\MeasurerIF
+Measurement\MeasurerComponent

在我的界面中,我声明了我想要实现的函数,而且这个界面更具抽象性。它看起来像这样:

classdef MeasuererIF < handle

methods (Abstract=true)

    getStatus(cObj) ;
    setStatus(cObj,iStatus) ;
    getInfo(cObj) ;
    setInfo(cObj,sInfo) ;
end

然后我创建了另一个类MeasurerComponent,其中我实现了方法以及构造函数:

classdef MeasurerComponent < PerformanceMeasurement.MeasuererIF
%% MeasurerComponent: Evaluates which model is used and contains them as childs.
%   Detailed explanation goes here

properties (Access=protected)
    miStatus;
    msInfo;
    mcData;
end

methods 

    %constructor
    function cObj = PerformanceMeasurement.MeasurerComponent ;

        cObj.miStatus = -1 ;
        cObj.msInfo = 'Import' ;
        cObj.mcData = [] ;
    end


    %Status
    function setStatus(cObj,iStatus)

        cObj.miStatus = iStatus;
    end

    function iStatus = getStatus(cObj)

        iStatus = cObj.miStatus;
    end

    %Info
    function setInfo(cObj,sInfo)

        cObj.msInfo = sInfo;
    end

    function sInfo = getInfo(cObj)

        sInfo = cObj.msInfo ;
    end

end

之前我刚刚使用get方法并且最近添加了set方法,现在它不再起作用了。问题是当我创建一个对象时

obj = Measurement.MeasurerComponent

程序不再初始化值。

For a = obj.getInfo;

我只收到[]

有人知道为什么它不再被初始化了吗?收到提示后,由于句柄类,我将初始化过程更改为构造函数。

我非常感谢并且对每个提示和小费感到高兴! 干杯

1 个答案:

答案 0 :(得分:2)

您的构造函数应由private void optionsToolStripMenuItem_Click(object sender, EventArgs e) { ??? } 定义,不带function cObj = MeasurerComponent前缀。这就是在Matlab中定义和使用包的方式 - 如果在包外部使用类,则添加前缀,但不在包内(在此解释:&#34;请注意,定义不使用包前缀&# 34; - http://uk.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html?refresh=true)。

此外,您有一个拼写错误 - 您的抽象父类文件名为PerformanceMeasurement,但在定义中拼写为+Measurement\MeasurerIF。调用哪一个并不重要,但是类的名称必须与文件名匹配!

如果我更正了这两个问题,那么您的代码就会变成

MeasuererIF

+Measurement\MeasurerIF

classdef MeasurerIF < handle methods (Abstract=true) getStatus(cObj) setStatus(cObj,iStatus) getInfo(cObj) setInfo(cObj,sInfo) end end

+Measurement\MeasurerIF

如果我键入以下内容:

classdef MeasurerComponent < Measurement.MeasurerIF
    %% MeasurerComponent: Evaluates which model is used and contains them 
    %% as childs.

        properties (Access=protected)
        miStatus
        msInfo
        mcData
    end

    methods

        %constructor
        function cObj = MeasurerComponent

            cObj.miStatus = -1 ;
            cObj.msInfo = 'Import' ;
            cObj.mcData = [] ;
        end


        %Status
        function setStatus(cObj,iStatus)

            cObj.miStatus = iStatus;
        end

        function iStatus = getStatus(cObj)

            iStatus = cObj.miStatus;
        end

        %Info
        function setInfo(cObj,sInfo)

            cObj.msInfo = sInfo;
        end

        function sInfo = getInfo(cObj)

            sInfo = cObj.msInfo ;
        end

    end
end
然后我回来了

obj = Measurement.MeasurerComponent;
obj.getInfo

这就是我的期望。