2016-12-27 112 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