2016-12-27 71 views
1

我想了解Matlab如何与数组对象一起工作。我已经阅读了几篇文章和关于这个主题的Matlab帮助,但我仍然不完全理解它。Matlab OOP对象类数组

让我们来看一个用例:我想管理几个测量通道(通道数量可能会有所不同)。每个测量通道都是具有多个属性的对象。现在我想要有一个类处理频道(channelHandler.m)。在这个类中,我可以简单地向数组添加一个新通道(稍后可能会有一些功能)。

所以我试过到目前为止:

1)创建measurementChannel.m类 在我只设置通道名称至今没有数据的构造。

classdef measurementChannel 
%CHANNEL holds an instance of a single channel 

properties 
    channelData 
    channelName = strings 
    channelUnit = strings 
    channelDataLength  
    channelOriginMeasurementFile 
end 

methods 
    function obj = channelTest(channelName) 
     if nargin > 0 
      obj.channelName = channelName; 
     end 
    end 
end 

为了检验这一类我尝试这样做:

channel(1) = measurementChannel('channelA'); 
channel(2) = measurementChannel('channelB'); 
channel(1).channelName 
channel(2).channelName 

这是运作良好。

2)现在,我已经创建了的ChannelHandler类:

classdef channelHandler 

properties (Access = public) 
    channelArray 
end 

methods (Access = public) 

    function addChannel(obj, Name) 

     testobj = measurementChannel(); 

     testobj.channelName = Name; 

     obj.channelArray = [obj.channelArray testobj]; 

    end 

end 

,并通过使用下面的命令访问此:因为channelArray未并且被定义为一个阵列将

createChannels = channelHandler(); 

createChannels.addChannel('channel1'); 
createChannels.addChannel('channel2'); 

createChannels.channelArray(1).channelName 
createChannels.channelArray(2).channelName 

失败访问channelArray(2)时发生错误。 所以我也尝试初始化数组(但我需要知道通道的数量)。

所以我的问题是: a)我真的需要初始化一个对象数组吗? b)我如何修复channelHandler类以将对象添加到数组中?

回答

1

问题是你没有继承from the handle class and therefore the modifications made within addChannel alter a copy of your object rather than the object itself。如果您从handle继承,则您粘贴的代码将可以正常工作。

classdef channelHandler < handle 
+0

感谢您的帮助 - 解决了这个问题。 – Christoph

+0

只是为了我的理解:如果我使用句柄类,只有对该对象的引用存储在channelArray中。为什么不能将数据本身存储在channelArray中? – Christoph

+0

@Christoph引用存储在数组中,但这与存储在'channelArray'中的数据本身实际上是一样的。所有这一切意味着,如果将它分配给一个不同的变量并对其进行修改,那么这种变化将反映在原始对象中。 – Suever