Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在一个数组中存储来自不同类的对象,并在MATLAB中调用相同的函数(哪些定义不同)?_Matlab_Oop_Interface_Subclass_Superclass - Fatal编程技术网

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

如何在一个数组中存储来自不同类的对象,并在MATLAB中调用相同的函数(哪些定义不同)?,matlab,oop,interface,subclass,superclass,Matlab,Oop,Interface,Subclass,Superclass,我有两个子类: 线 弧 它们的对象将通过在末端附加路径来创建路径。它们有自己的“绘制曲线”方法。我想将这些对象按如下顺序存储在数组中: path = [line1,line2,arc1,line3,arc2,arc3,line4,arc4,arc5...]; (我认为“path”应该是超类“path”的对象) 当我编写这样的代码时 for i=1:size(path) path(i).plotCurve; hold on end 结果应该显示出来。我应该能看到整条路。(因

我有两个子类:

  • 线
它们的对象将通过在末端附加路径来创建路径。它们有自己的“绘制曲线”方法。我想将这些对象按如下顺序存储在数组中:

path = [line1,line2,arc1,line3,arc2,arc3,line4,arc4,arc5...];
(我认为“path”应该是超类“path”的对象) 当我编写这样的代码时

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

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

看起来,从中进行子类化允许此行为:

classdef路径
我在这里找到了这个:


虽然我认为将
path
制作为单元格数组更容易,但上面的代码中除了使用不同的索引外,行为没有任何区别:
path{I}.plotCurve
看起来子类化允许这种行为:

classdef路径
我在这里找到了这个:


虽然我认为将
路径
制作成一个单元格数组更容易,但上面的代码除了使用不同的索引外,在行为上没有什么不同:
路径{I}.plotCurve
进一步考虑@Cris的建议,我建议进行类似这样的改进(未经测试)

classdef路径

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

根据@Cris的建议,我建议进行类似这样的改进(未经测试)

classdef路径

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

我们希望直线和圆弧是什么数据类型/变量类型?这些都是类,每个都有10-15个浮点属性。在这种情况下不需要继承。将
path
设置为单元格数组,可以使用两个类的对象(或任何其他对象)填充该数组。然后您可以调用每个对象的
plotCurve
方法,只要该对象定义了这样一种方法,它就会工作。@CrisLuengo是的,您是对的。事实上我已经这么做了。但是,我想知道如何在不使用oop的单元格数组的情况下实现。我们希望line和arc是什么数据类型/变量类型?这些是类,每个类有10-15个浮点属性。在这种情况下不需要继承。将
path
设置为单元格数组,可以使用两个类的对象(或任何其他对象)填充该数组。然后您可以调用每个对象的
plotCurve
方法,只要该对象定义了这样一种方法,它就会工作。@CrisLuengo是的,您是对的。事实上我已经这么做了。但是,我想知道如何在不使用oop的单元阵列的情况下实现这一点。
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