主要内容

串联不同类的对象

基础知识

本节中提出的材料构建了对以下部分中所示的信息的理解。

马铃薯贴级规则

马铃薯®遵循这些串联对象的规则:

  • MATLAB始终尝试将所有对象转换为主导类。

  • 用户定义的类优先于内置类双倍的

  • 如果任何两个对象之间没有定义的主导关系,那么最左边的对象占主导地位(见课程优先级)。

在连接或下标作业期间转换为主导类时,MATLAB将为转换方法搜索非统计名称与主导类相同。如果存在这样的转换方法,MATLAB调用它。如果不存在转换方法,MATLAB会调用非主导对象上的主导类构造函数。

占主导地位可以定义霍罗斯卡特Vertcat., 或者修改默认连接过程的方法。

笔记

除非这些对象是异构层次结构的一部分,否则MATLAB不会将对象转换为公共超类。有关更多信息,请参阅设计异构类层次结构

连接物体

连接将对象与数组组合起来:

ary = [obj1,obj2,obj3,......,objn];

的大小ar是1-by-n。

ary = [obj1; obj2; obj3;......; objn];

的大小ar是n-by-1。

阵列的类与正在连接的对象的类相同。如果MATLAB可以将对象转换为主导类,则可以串联不同类的对象。MATLAB尝试通过以下方式转换:

  • 如果存在,则调用较低的对象转换器方法。

  • 将劣质对象传递给主导类构造函数以创建主导类的对象。

如果劣质对象的转换成功,MATLAB返回占主导民类的数组。如果无法转换,MATLAB返回错误。

致电主导类构造函数

MATLAB调用主导类构造函数将下级级别的对象转换为主导类。MATLAB将下级对象传递给构造函数作为参数。如果类设计使主导类构造函数能够接受下级的对象作为输入参数,则可以在不实现单独的转换器方法的情况下连接。

如果构造函数只需将此参数分配给属性,则结果是具有存储在属性中的下级的对象的主导类的对象。如果此赋值不是所需的结果,则确保类构造函数包括充足的错误检查。

例如,考虑课程颜色混合物和两个子类,RGBColor.HSVColor.

Classdef.颜色混合物特性颜色结尾结尾

班上RGBColor.继承了颜色物业颜色混合物RGBColor.将定义为红色,绿色和蓝色(RGB)值的三元素向量的颜色值存储。构造函数不限制输入参数的值。它直接分配此值颜色财产。

Classdef.rgbcolor 方法功能obj = rgbcolor(RGB)如果nargin> 0 obj.color = RGB;结尾结尾结尾结尾

班上HSVColor.也继承了颜色物业颜色混合物HSVColor.将定义为色调,饱和度(HSV)值(HSV)值的三元素矢量定义的颜色值。

Classdef.hsvcolor 方法功能obj = hsvcolor(HSV)如果nargin> 0 obj.color = HSV;结尾结尾结尾结尾

创建每个类的实例并将它们连接到数组中。这RGBColor.对象是占主导地位的,因为它是最左边的对象,并且既没有类别都没有定义主导关系:

crgb = rgbcolor([1 0 0]);chsv = hsvcolor([01 1]);ary = [crgb,chsv];班级(ary)
ans = rgbcolor.

您可以将这些对象组合到数组中,因为MATLAB可以通过类的下级对象HSVColor.到主导类的构造函数。但是,请注意颜色第二个财产RGBColor.阵列中的对象实际上包含一个HSVColor.对象,不是一个RGB.颜色规格:

ary(2).color
ANS = HSVColor具有属性:颜色:[0 1 1]

避免这种不良行为:

  • 实现转换方法方法

  • 在将值分配给属性之前执行Class构造函数的参数检查

转换方法

如果您的类设计需要对象转换,请为此目的实现转换器方法。

颜色混合物类定义了转换器方法RGBColor.HSVColor.对象:

Classdef.颜色混合物特性颜色结尾方法功能rgbobj = rgbcolor(obj)如果isa(obj,'hsvcolor')RGBOBJ = RGBCOLOR(HSV2RGB(OBJ.COLOR));结尾结尾功能hsvobj = hsvcolor(obj)如果isa(obj,'rgbcolor')hsvobj = hsvcolor(rgb2hsv(obj.color));结尾结尾结尾结尾

创建一个数组RGBColor.HSVColor.具有修订后的超类的对象:

crgb = rgbcolor([1 0 0]);chsv = hsvcolor([01 1]);ary = [crgb,chsv];班级(ary)
ans = rgbcolor.

MATLAB调用转换器方法HSVColor.它从超类继承的对象。第二个数组元素现在是一个RGBColor.具有分配给的RGB颜色规范的对象颜色财产:

ary(2)
ANS = RGBColor具有属性:颜色:[1 0 0]
ary(2).color
ans = 1 0 0

如果最左边的对象是类HSVColor.,阵列ar也是课堂HSVColor.,Matlab转换了颜色HSV颜色规范的属性数据。

ary = [chsv crgb]
ARY = 1x2 HSVCOLOR属性:颜色
ary(2).color
ans = 0 1 1

定义超类中的转换方法并在子类构造函数中添加更好的参数检查,产生更可预测的结果。这里是RGBColor.具有参数检查的类构造函数:

Classdef.rgbcolor 方法功能obj = rgbcolor(RGB)如果nargin == 0 RGB = [0 0 0];别的如果〜(ISA(RGB,'双倍的'......&& size(RGB,2)== 3......&& max(rgb)<= 1 && min(rgb)> = 0)错误(“将颜色指定为RGB值”结尾结尾obj.color = RGB;结尾结尾结尾

您的应用程序可能需要额外的错误检查和其他编码技术。这些示例中的类仅被设计为展示概念。

相关话题