如何在一个数组中存储来自不同类的对象,并在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
方法-该方法必须是密封的
。它打开数组以调用每个元素上的indivualplotOne
方法。根据@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