Matlab OOP对象类数组

时间:2016-12-27 12:08:55

标签: arrays matlab oop

我想了解Matlab如何使用数组对象。我已经阅读了几个帖子和Matlab对这个主题的帮助,但我仍然完全不了解它。

让我们来看一个用例:我想管理多个测量通道(通道数量可能会有所不同)。每个测量通道都是具有多个属性的对象。现在我想要一个处理通道的类(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

并使用以下命令访问它:

createChannels = channelHandler();

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

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

这会失败,因为channelArray未定义为数组,并且在访问channelArray(2)时会出错。 所以我也尝试初始化数组(但后来我需要知道通道的数量)。

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

1 个答案:

答案 0 :(得分: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