当前位置: 首页 > 知识库问答 >
问题:

如何在一个数组中存储来自不同类的对象,并在MATLAB中调用相同的函数(哪些定义不同)?

夏俊人
2023-03-14

我有两个子类:

它们的对象将通过在它们的末端附加它们来创建路径。这些都有自己的“plotCurve”方法。我想将这些对象存储在一个数组中,顺序如下:

path = [line1,line2,arc1,line3,arc2,arc3,line4,arc4,arc5...];

(我认为“path”应该是超类“path”的对象)当我编写类似这样的代码时;

for i=1:size(path)
    path(i).plotCurve;
    hold on
end

结果应该显示出来。我应该能看到整条路。(因此,当“直线”的对象出现时,应运行“plotCurve”方法,对于圆弧对象也是如此)。

共有2个答案

梁嘉祥
2023-03-14

根据@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

这使您可以在路径数组上调用plotAll方法-该方法必须是密封的。它展开数组以调用每个元素上的独立plotOne方法。

皇甫敏达
2023-03-14

它看起来像是matlab中的子类。混音。异类允许此行为:

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

我在这里发现了这个:https://www.mathworks.com/matlabcentral/answers/4354-matlab-handle-class-violates-polymorphism-on-handle-equivalence

虽然我认为使path成为单元格数组更容易,但是上面的代码在行为上没有区别,除了使用不同的索引:path{i}. plotCurve

 类似资料:
  • 编辑:最后一个问题,如何通过值而不是引用来存储它?

  • 问题内容: 我有两个不同的数组,一个带有字符串,另一个带有整数。我想将它们连接成一个数组,其中每一列都具有原始数据类型。我当前执行此操作的解决方案(请参见下文)将整个数组转换为dtype = string,这似乎在内存方面效率很低。 何时和何时可能使dtypes多元化? 问题答案: 一种方法可能是使用记录数组。“列”与标准numpy数组的列不同,但是对于大多数用例来说,这就足够了: 请注意,您还可

  • 假设我有一个数据帧,如下所示: 我想在时间分组一个重复的数据,并应用不同的函数到和(例如,求和和计算卷加权平均值)...我知道我能做到 将重复索引分组,然后使用或函数获取第一行或最后一行,但这并不是我真正想要的。 是否有方法对不同列中的值进行分组,然后应用不同的(由我编写的)函数?

  • 我可以根据编号对下面的代码进行排序吗? 就像数据被排序一样,假设升序应该如下所示: 我的代码: 我试过以下方法,但我觉得我做错了什么。但我不知道是什么。 你能告诉我我做错了什么吗?我可以根据名称对这些数据进行排序吗?

  • 我正在学习Java,并为我的期末考试做游戏项目。我试图给我的数组添加不同的值,但当我打印数组时,每次它在地图上显示不同的对象时,我将在这里共享输出。这是主类: 导入人员*; 导入java.security.publickey;导入java.util.Random; 我的一个朋友叫我提取地图,但我不知道该怎么做。这些是对象图像图像

  • 根据Spark数据集介绍: 在我们期待Spark 2.0的时候,我们计划对数据集进行一些令人兴奋的改进,具体来说:。。。自定义编码器–虽然我们目前为各种类型自动生成编码器,但我们希望为自定义对象打开一个API。 并且尝试将自定义类型存储在中会导致以下错误: 无法找到存储在数据集中的类型的编码器。导入sqlC支持原始类型(Int、String等)和产品类型(case类)ontext.implicit