[英]How to store objects from different classes in one array and call the same function (which definitions are different) in MATLAB?
我有兩個子類:
它們的對象將通過將它們附加到它們的末端來創建路徑。 這些都有自己的“plotCurve”方法。 我想將這些對象存儲在一個數組中,例如:
path = [line1,line2,arc1,line3,arc2,arc3,line4,arc4,arc5...];
(我認為“路徑”應該是超類“路徑”的 object)當我編寫類似的代碼時;
for i=1:size(path)
path(i).plotCurve;
hold on
end
應該顯示結果。 我應該能夠看到整個路徑。 (因此,當“Line”的 object 出現“plotCurve”方法時,應該運行並且對於 Arc 對象也是如此)。
它看起來像matlab.mixin.Heterogeneous
的子類允許這種行為:
classdef Path < matlab.mixin.Heterogeneous
%...
end
classdef Line < Path
%...
end
classdef Arc < Path
%...
end
path = [Line,Line,Arc,Line,Arc,Arc];
figure, hold on
for i=1:numel(path)
path(i).plotCurve;
end
盡管我認為將path
設為元胞數組更容易,但上述代碼中的行為沒有區別,除了使用不同的索引: path{i}.plotCurve
。
根據@Cris 的建議,我建議進行一些類似這樣的改進(未經測試)
classdef Path < matlab.mixin.Heterogeneous
methods (Abstract, Access = protected)
plotOne(obj)
end
methods (Sealed)
function plotAll(objs)
figure; hold on;
for obj = objs(:).' % loop over all elements
plotOne(obj);
end
end
end
end
這使您可以在Path
數組上調用plotAll
方法 - 該方法必須是Sealed
。 它展開數組以在每個元素上調用單獨的plotOne
方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.