文件

串联不同类的对象

基础知识

在本节中给出的材料构建在以下各节中提供的信息的理解。

马铃薯级联规则

马铃薯®遵循这些规则拼接对象:

  • MATLAB总是试图将所有对象转换为主导类。

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

  • 如果有任何两个物体之间没有限定支配关系,则最左边的对象占优势(见优先级)。

当在连接或下标赋值期间转换为主导类时,MATLAB会在非主导类中搜索与主导类同名的转换方法。如果存在这样的转换方法,MATLAB调用它。如果转换方法不存在,MATLAB将在非支配对象上调用支配类构造函数。

这是可能的统治阶级定义horzcatvertcat, 或者该修改默认连结处理方法。

笔记

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

连接对象

级联联合对象成阵列:

必要=[其中obj1 methoda obj3,......objn);

的大小为1行n。

进制= [OBJ1; OBJ2; OBJ3;......; objn];

的大小是n乘1。

类中的阵列是作为类的对象的被级联的相同。串联不同类的对象是可能的,如果MATLAB可以将对象转换为统治阶级。MATLAB尝试不同的对象转换:

  • 调用劣对象转换器的方法,如果存在的话。

  • 传递一个劣质对象统治阶级构造函数来创建统治阶级的对象。

如果下对象的转换成功,MATLAB返回一个数组,它是主要的类的。如果转换是不可能的,MATLAB返回错误。

调用显性类的构造函数

MATLAB调用主类构造函数,将从属类的对象转换为主类。MATLAB将次对象作为参数传递给构造函数。如果类设计允许主类构造函数接受下级类的对象作为输入参数,那么无需实现单独的转换器方法就可以进行连接。

如果构造简单地分配此参数的属性,其结果是占主导地位的类的对象存储在一个属性较差类的一个对象。如果这种分配不是一个理想的结果,然后确保类的构造函数包含足够的错误检查。

例如,考虑类ColorClass和两个子类,RGBColorHSVColor

classdefColorClass属性颜色结尾结尾

RGBColor继承了颜色物业ColorClassRGBColor存储定义为红色,绿色的三元素向量的色彩值,和蓝(RGB)值。构造函数不限制输入参数的值。据该值直接分配给颜色财产。

classdefRGBColor 方法函数OBJ = RGBColor(RGB)如果Nargin > 0 obj。颜色= rgb;结尾结尾结尾结尾

HSVColor也继承了颜色物业ColorClassHSVColor存储定义为色相,饱和度,亮度值(HSV)值的三元素向量的颜色值。

classdefHSVColor 方法函数obj = HSVColor (hsv)如果nargin> 0 obj.Color = HSV;结尾结尾结尾结尾

创建每个类的实例,并将它们连接到一个数组中。这RGBColorObject是显性的,因为它是最左边的对象,而且两个类都没有定义显性关系:

crgb = RGBColor([1 0 0]);chsv = HSVColor([0 1 1]);必要= [crgb, chsv];类(必要)
ANS = RGBColor

你可以将这些对象组合成一个数组,因为MATLAB可以传递类的次等对象HSVColor占主导地位的类的构造函数。但是,请注意,颜色第二财产RGBColor对象实际上包含HSVColor对象,而不是一个RGB.颜色规格:

元(2)。颜色
ANS = HSVColor与特性:颜色:[0 1 1]

避免这种不受欢迎的行为:

  • 实施转换方法

  • 在为属性赋值之前,在类构造函数中执行参数检入

转换器的方法

如果你的类设计需要对象转换,为实现这一目的转换器的方法。

ColorClass类定义了转换器的方法RGBColorHSVColor对象:

classdefColorClass属性颜色结尾方法函数rgbObj = RGBColor(OBJ)如果ISA(OBJ,'HSVColor') rgbObj = RGBColor(hsv2rgb(obj.Color));结尾结尾函数hsvObj = HSVColor(OBJ)如果ISA(OBJ,“RGBColor”)hsvObj = HSVColor(rgb2hsv(obj.Color));结尾结尾结尾结尾

创建数组RGBColorHSVColor带有修改过的超类的对象:

crgb = RGBColor([1 0 0]);chsv = HSVColor([0 1 1]);必要= [crgb, chsv];类(必要)
ANS = RGBColor

MATLAB呼吁该转换器的方法HSVColor对象,其从超类继承。第二阵列元件现在是一个RGBColor与分配给一个RGB彩色规范对象颜色属性:

元(2)
ans = RGBColor with properties: Color: [1 0 0]
元(2)。颜色
ANS = 1 0 0

如果最左边的对象是类的HSVColor中,阵列也是有档次的HSVColor和MATLAB转换颜色属性数据到HSV颜色规格。

Ary = [chsv crgb]
元= 1x2的HSVColor特性:颜色
元(2)。颜色
Ans = 0 1 1

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

classdefRGBColor 方法函数OBJ = RGBColor(RGB)如果Nargin == 0 RGB = [0 0 0];别的如果~ (isa (rgb,'双倍的'......&&大小(RGB,2)== 3......&&最大值(RGB)<= 1 &&分钟(RGB)> = 0)错误(“指定颜色的RGB值”结尾结尾obj.Color = RGB;结尾结尾结尾

您的应用程序可能需要额外的错误检查和其它编码技术。在这些例子中的类仅旨在展示概念。

相关的话题

这个话题有用吗?