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 - Fatal编程技术网

Matlab 初始化子类对象数组将创建异类超类数组

Matlab 初始化子类对象数组将创建异类超类数组,matlab,oop,Matlab,Oop,在Matlab中,我有两个类 classdef A < matlab.mixin.Heterogeneous properties a; end methods function obj = A(varargin) obj.a = 3; end end end 为什么Matlab坚持让它成为A级?我怎么能坚持它是B类的呢 编辑: 使用调试器很明显,在创建objarray(1)时,Matl

在Matlab中,我有两个类

classdef A < matlab.mixin.Heterogeneous
    properties
        a;
    end
    methods
        function obj = A(varargin)
           obj.a = 3;
        end
    end
end
为什么Matlab坚持让它成为A级?我怎么能坚持它是B类的呢

编辑:
使用调试器很明显,在创建
objarray(1)

时,Matlab从未进入
B
的构造函数,我自己也从未尝试过,但我相信
Matlab.mixin.Heterogeneous
有一个方法
getDefaultScalarElement
,您可以自己实现/重写,它将定义在指定后面的元素时如何回填数组的初始元素。有关更多信息,请参见文档页面的一半。

objarray
似乎已经在您的环境中定义了……尝试执行
objarray=[B,B]getDefaultScalarElement
,我确实可以强制
A
数组中的默认对象属于
B
类。然而,我不想把它锁在那个案子里。例如,如果我使用
objarray(2)=C
初始化,其中
C
A
的另一个子类,那么objarray应该是类C。但是objarray必须是类
A
(根类
B
C
)。我也不认为这是一个很好的解决方案。不过我们必须更进一步。您还可以将此与为类指定
suberiorclasses
属性结合起来,该属性定义了一个优先层次结构,用于在连接不同类的对象时决定方法调度(在类间方法名称冲突的情况下)和类转换。也许这会有帮助?嗯,这是相关的,但我真的不想用绝对值来指定优先级。我希望构造函数的优先级由
objarray(2)=A/B/C
@Patrick:在这种情况下,您唯一的选择是使用声明数组:
objarray=repmat(B,2,1)
。顺便说一句,我尝试了
B.empty
,但也没用。我是根据经验说,对象数组的重载
subsref
subsasgn
几乎不可能正确!您需要实现所有的下标类型:
()
{}
,但您肯定会破坏其中的一些类型,尤其是在使用对象数组而不是标量时(有太多可能链接下标的情况:
obj(2).x{3}.y(4:6)
)。您还必须小心使用
obj.x
表示法保留私有属性/方法。如果你问我这真是一团糟:)
classdef B < A
    properties
        b;
    end
    methods
        function obj = B(varargin)
            obj = obj@A(varargin);
            obj.b = 4;
        end
    end
end
>> objarray(2) = B

objarray = 

  1x2 heterogeneous A (A, B)

  Properties:
    a

  Methods, Superclasses