Matlab - 构造函数不会初始化成员值
亲爱的可爱社区,Matlab - 构造函数不会初始化成员值
我已经看过谷歌和论坛,也发现了一些有趣的帖子。但最终我仍然没有得到它的工作。所以,我会在这里发布这个问题。我知道在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;
我只接收[]
是否有人有一个想法,为什么它不会再初始化?在收到提示后,由于句柄类,我将初始化过程更改为构造函数。
我真的很感激,很高兴每个提示和提示! Cheers
您的构造函数应该由function cObj = MeasurerComponent
定义,而不要使用PerformanceMeasurement
前缀。这只是在Matlab中定义和使用包的方式 - 如果在包外部使用类但不在包内部,则添加前缀(在此解释为:“请注意,定义不使用包前缀”) - http://uk.mathworks.com/help/matlab/matlab_oop/scoping-classes-with-packages.html?refresh=true )。
此外,您有一个错字 - 您的抽象父类文件被称为+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
然后我回去
ans =
Import
这是我的期望。
非常感谢。不知道这个前缀是没有必要的。这可以帮助我解决很多问题,并且您提供的链接非常有帮助。目前无法测试,但白天我会给你更准确的反馈。但肯定会这样。所以,非常感谢你为我的问题花费在星期天的时间!你很棒! 与拼写错误的问题是,我写入的计算机不是我的matlab安装的那个,所以我从内存中写下来。不幸的是我写了一个错误。在文件中没有错别字。 – luftfahrt
你好汤姆!我只是能够实施你的建议,一切工作都很好!我很乐意赞扬你,但是我的声誉太小,所以在文本形式:谢谢你! – luftfahrt
没问题!很高兴能为您提供帮助,祝您的Matlab编程顺利! – Tom