主要内容

设计异构类层次结构

创建支持异构阵列的类金宝app

本主题介绍定义支持异构阵列的类的概念。金宝app有关现有MATLAB串联的信息®对象,见这些主题。

有关使用异构阵列的示例,请参阅异构阵列的类层次结构

马铃薯阵列

MATLAB通过阵列中包含的对象的类确定数组的类。MATLAB与某些语言不同,您可以定义对象指针或引用数组。在这些其他语言中,数组的类型与数组中的对象的类型不同。您可以访问数组的元素并在这些元素上调度为方法,但您不能在整个数组上调用对象方法,就像Matlab中一样。

Matlab的对象阵列在课堂上是同质的。由于这种同一性,您可以在整个阵列上执行操作,例如乘法数矩阵。您可以通过定义来自常见超类的类层次结构来形成异构阵列。单元格阵列为阵列类型提供可以保存不同类型的无关对象的阵列类型。

异构层次结构

当这些类是异构层次结构的一部分时,您可以形成作为公​​共超类的子类的对象数组。Matlab异构类层次结构:

  • 源自于matlab.mixin.heterogeneous

  • 定义一个直接从中源的单根超级类matlab.mixin.heterogeneous

  • 密封由子类继承的方法。

例如,在下图中,形状是异构层次结构的根源。

异构阵列

异构阵列是其特定类别不同的​​对象数组,但所有对象都导出或者是常见超类的实例。常见的超类构成了可以将其组合成异构阵列的类层次结构的根。

常见的超类必须派生matlab.mixin.heterogeneous。您可以在整个中调用数组的方法必须对所有子类具有相同的定义。

异构层次结构对:

  • 创建具有不同类的对象数组,而是相关层次结构的一部分。

  • 作为整体上的数组上最特定的常见超类的呼叫方法

  • 使用带数组的点表示法访问最特定的常用超类的属性

  • 使用支持对象阵列的公共运算符金宝app

  • 金宝app支持数组索引(标量或非索卡尔),其返回最特定类的数组

异构阵列概念

  • 异构数组 - 其中两个或更多个元素属于不同特定类的数组。所有元素都派生来自同一个根超类。

  • 根超类 - 直接从中派生matlab.mixin.heterogeneous。根超类可以是抽象或混凝土。只有根超类的混凝土亚类可以形成异质阵列。

  • 最具体的常见超级类 - 继承层次中的最特定类,异构阵列中的所有对象导出。最具体的常见超类可以是根超类或由当前阵列中的对象共享的更特定的超类。

  • 类异构阵列的类 - 来自异构阵列中的所有物体都导出的最具体的常见超类。添加和删​​除异构阵列的对象可以更改实例共享的最特定的超类。这种变化导致异构阵列的类别的变化。最具体的常见超级类可以是抽象的。

异构阵列的性质

该图中的异构层次结构说明了异构阵列的特征:

  • 数组类

  • 物业访问

  • 方法调用

异构阵列类

异构阵列的类是由阵列的对象共享的最特定的超类的类。

如果满足以下条件,则串联和下标分配操作返回异构阵列:

  • 赋值语句右侧的对象是不同的类

  • 赋值语句右侧的所有对象都从常见的子类中导出matlab.mixin.heterogeneous

例如,通过串联这些类的对象来形成阵列。班级A1Classa.

A1 = [特定,特定B];班级(A1)
ans = classa.

如果数组包括类的对象特定,班级a2rootsuperclass.

A2 = [特定,特定,SpeciolC];班级(A2)
ans = rootsuperclass.

如果您分配了类的对象特定到阵列A1使用索引,类A1成为rootsuperclass.

A1(3)=特定;班级(A1)
ans = rootsuperclass.

如果数组包含仅一个类的对象,则阵列不是异构的。例如,类的一种特定

a = [特定,特定,特定的];班级(a)
ans =特定的

物业访问

当阵列的类定义属性时,访问阵列属性,带点表示。阵列的类是最具体的常见超类,可确保所有对象继承相同的属性。

例如,假设Classa.定义一个名为的属性Prop1.

A1 = [特定,特定B];A1.Prop1.

参考Prop1.使用点表示法返回值Prop1.对于数组中的每个对象。

调用方法

要在异构阵列上调用方法,阵列的类必须定义或继承该方法密封。例如,假设rootsuperclass.定义A.密封方法调用超级机制

在数组中的所有对象上调用方法a2

A2 = [特定,特定,SpeciolC];A2.Supermethod.

密封方法(使其无法在子类中覆盖)可确保对数组的所有元素存在相同的方法定义。在数组的单个元素上调用该方法调用相同的方法实现,以调用整个阵列上的方法。

不支金宝app持的层次结构

在获取默认对象时,异构层次结构不能含糊不清,确定数组的类,并将类对象转换为其他类型。层次结构的成员可以源自一个根超类(即,从只有一个直接子类matlab.mixin.heterogeneous)。

此图显示了不允许的层次结构:

Classa.源自两个子类的类matlab.mixin.heterogeneous

下图显示了两个单独的异构层次结构。Classa.只有一个根超类(称为ootherbaseclass.)。异构层次结构不再含糊不清:

默认对象

默认对象是通过调用没有参数的类构造函数返回的对象。MATLAB在这些情况下使用默认对象:

  • 索引的分配在数组元素中创建一个带空白的数组。例如,分配数组的第一个元素H索引5.

    h(5)= Classa(Arg1,Arg2);

    MATLAB使用默认对象填充未分配的位置。

  • 当阵列中的特定对象的类定义不可用时,从MAT文件加载异构数组。MATLAB使用默认对象替换对象。

异构层次结构使您可以为该层次结构定义默认对象。这matlab.mixin.heterogeneous类提供了一种调用方法的默认实现getdefaultscalarement.。此方法返回异构层次结构的根类的实例,除非根超类是抽象的。

如果根超类是抽象的或不适合默认对象,则覆盖getdefaultscalarement.方法。实施getdefaultscalarement.覆盖根超类,直接源于matlab.mixin.heterogeneous

getdefaultscalarement.必须返回从根超类派生的标量对象。有关如何实现此方法的具体信息,请参阅getdefaultscalarement.

转换和串联期间转换

如果创建异构数组,则包含不源于同一根超类的对象,Matlab尝试调用调用的方法ConventObject.。实施ConventObject.将对象转换为适当的类。此方法没有默认实现。

为了支金宝app持非均质层次结构的对象形成异构阵列,实现aConventObject.根超类中的方法。这ConventObject.方法必须将非变量对象转换为异构层次结构的有效成员。

有关实施的详细信息ConventObject.方法,参见matlab.mixin.heterogeneous

异构抽象班的空阵列

对于同质阵列,MATLAB不允许您初始化一个空的抽象类。但是,如果类是异构层次结构的一部分,则可以初始化抽象类的空数组。初始化空的异构阵列在您预先知道混凝土元件的类别中是有用的。

例如,假设rootsuperclass.是一个抽象的类,它是异构层次结构的根源。使用该初始化数组空的静态方法:

ary = rootsuperclass.empty;

相关话题