类支持数组创万博1manbetx建函数

扩展阵列制作功能为你的类

有几个MATLAB®创建特定大小和类型的数组的函数,例如。用户定义的类可以添加对数组创建函数的支持,而不需要使用重载万博1manbetx的方法语法。

对于任何的数万博1manbetx组创建函数类的支持,可以开发代码,您可以使用内置的和用户定义的数据类型分享。例如,类变量的X下面的代码可以是初始开发期间的内置类型,然后被透明重载的用户定义类替换

cls =类(x);zArray = 0 (m, n, cls);

数组创建函数通过两种方式创建特定类型的数组:

  • 类名语法 - 指定用于确定数组元素的类型类名称。

  • 原型对象语法——提供一个原型对象,函数使用它来确定数组元素的类型和其他特征。

例如:

zArray = 0 (2、3、'UINT8');
p = uint8([1 3 5;2 4 6]);zArray = 0 (2、3、“喜欢”,p);

增加对这些功能的支持,一个万博1manbetx名为下课后我的课,你可以使用类似的语法与类:

zArray = 0 (2、3、“MyClass”);

或传递类的一个对象:

p = MyClass (…);zArray = 0(大小(p),“喜欢”,p);

MATLAB使用这些参数发送到你的类适当的方法。

数组创建功能,支持重载万博1manbetx

以下功能支持这种超载。万博1manbetx

数组创建功能
眼睛
(小写)
真正的
兰特
randn
兰迪

使用哪种语法

要创建不需要构造函数输入参数的默认对象数组,请使用类名语法。

若要创建具有特定属性值的对象数组,或者构造函数需要其他输入,请使用prototype对象提供此信息。

类可以同时支持类名和原型万博1manbetx对象语法。

你可以实现一个类名的语法与真正的功能,即使这些功能不默认支持这种语法。万博1manbetx

如果原型方法不存在,则调用类名方法

如果类实现了类名语法,但没有为特定函数实现原型对象语法,那么仍然可以同时调用这两种语法。例如,如果您实现一个静态方法,您可以调用:

0 (…“喜欢”MyClass (…))

在调用prototype对象语法的情况下,MATLAB首先搜索名为zerosLike。如果MATLAB找不到此方法,则调用静态方法。

如果你只需要类名来创建磁盘阵列此功能非常有用。你并不需要实现这两种方法,以支持完整的数组创建函数语法。万博1manbetx当你只实现类名的语法,到原型对象语法的调用是一样的调用类名语法。

实现对数组创建函数的万博1manbetx支持

使用两种不同的方法来支持数组创建功能。万博1manbetx一种方法实现了类名称语法和其它工具的原型对象语法。

例如,为了支持万博1manbetx功能:

  • 实现类名的语法:

    零(...”班级名称“)

    作为一个静态的方法:

    方法(静态)函数Z =零(varargin)...结束结束
  • 实现原型对象的语法:

    0 (…“喜欢”,OBJ)

    作为一个隐藏的方法与字符向量“喜欢”追加到名称。

    方法(隐)函数(obj,varargin)…结束结束

怎么样MATLAB解释函数调用

对于数组创建函数的特殊支万博1manbetx持,从语法的解释结果。

  • 呼唤本表格功能:

    0 (…班级名称

    使用以下语法调用类静态方法:

    班级名称.zeros(变长度输入宗量{1:end-1})
  • 呼唤本表格功能:

    0 (…“喜欢”,OBJ)

    调用这个语法类方法:

    zerosLike(OBJ,varargin {1:端-2})

万博1manbetx支持所有功能输入

数组创建函数的输入参数可以包括函数返回的数组的维数,也可能包括其他参数。通常,有三种情况,你的方法必须支持:万博1manbetx

  • 没有维度输入参数导致返回标量。例如:

    Z =零(“MyClass”);
  • 一个或多个尺寸等于或小于零,导致空数组。例如:

    z = 0 (2 0“MyClass”);
  • 指定数组大小的任意数量的有效数组维数。例如:

    Z =零(2,3,5,“MyClass”);

当数组创建函数调用您的类方法时,它传递输入参数,不包括类名或文字“喜欢”和对象变量的方法。您可以实现与这些签名的方法:

  • 0(变长度输入宗量)为“类名”的方法

  • 零(OBJ,varargin)用于“类似原型对象”方法

样本类

颜色类表示特定颜色空间中的颜色,例如,RGBHSV, 等等。在讨论类名方法实现原型对象方法实现使用这个类作为重载方法实现的基础。

classdef颜色属性ColorValues = [0,0,0]的ColorSpace =“RGB”结束方法函数obj =颜色(cSpace、价值观)如果nargin> 0 obj.ColorSpace = cSpace;obj.ColorValues =值;结束结束结束结束

类名方法实现

功能去掉最后班级名称字符方法中对静态方法的调用颜色类。传递给静态方法的参数是阵列尺寸参数。

这里是a的一个实现该方法颜色类。此实现:

  • 定义方法静态的(需要)

  • 返回标颜色对象如果调用没有维度参数

  • 返回如果调用一个空数组任何维数参数都等于0。

  • 返回默认的数组颜色对象。使用repmat创建由呼叫到所指定的尺寸的阵列

classdef颜色...方法(静态)函数z = 0(变长度输入宗量)如果(输入参数个数= = 0)% 0(颜色)Z =颜色;ELSEIF任何([{varargin:}] <= 0)%用于任何维度<= 0的零z = Color.empty(变长度输入宗量{:});其他的% 0 (m, n,…,“颜色”)%用途属性的默认值z = repmat(颜色、变长度输入宗量{:});结束结束结束结束

方法使用的默认值ColorValues属性,因为这些值适合这种应用。一个的实现方法可以设置ColorValues属性(1,1,1)为例。

假设你想超载兰迪功能,以达到下列目标:

  • 每个定义ColorValue属性作为1×3阵列中的1〜a的范围规定的最大值(例如,1-255)。

  • 容纳标量、空数组和多维数组大小。

  • 返回的数组颜色对象的指定维度,每个具有随机ColorValues

classdef颜色...方法(静态)函数R =兰迪(varargin)如果(输入参数个数= = 0)兰迪%('名称')r =颜色(“RGB”兰迪(255年,[1,3]));ELSEIF任何([varargin {2:端}] <= 0)%对于任意维度<= 0的randiR = Color.empty(varargin {2:端});其他的兰迪% (max, m, n,…,“名称”)如果numel([{varargin:}])<2误差(“输入参数不够”结束dim =[变长度输入宗量{2}结束):;r = 0(变暗,“颜色”);对于K = 1:PROD(变暗)R(k)的=颜色(“RGB”,兰迪(varargin {1},[1,3]));结束结束结束结束结束

原型对象方法实现

一个返回是“像原型对象”对象的阵列的方法的目的依赖于类的要求。为了颜色类,zeroLike方法创建具有色彩空间原型对象的属性值,但ColorValues都是零。

这里是a的一个实现zerosLike该方法颜色类。此实现:

  • 定义zerosLike方法隐藏的

  • 返回标颜色对象的调用函数没有维度参数

  • ,则返回一个空数组函数的维度参数为负或等于0。

  • 返回数组颜色通过该呼叫到所指定的尺寸的对象功能。

classdef颜色...方法(隐)函数Z = zerosLike(OBJ,varargin)如果输入参数个数= = 1%为0(‘喜欢’,obj)cSpace = obj.ColorSpace;z =颜色;z。色彩= cSpace;ELSEIF任何([{varargin:}] <= 0)%用于任何维度<= 0的零z = Color.empty(变长度输入宗量{:});其他的%对于零(M,N,..., '喜欢',OBJ)如果〜isscalar(OBJ)错误(“Prototype对象必须是标量”结束obj =颜色(obj.ColorSpace 0 (1、3、“喜欢”obj.ColorValues));z = repmat (obj,变长度输入宗量{:});结束结束结束结束

全类上市

这是颜色类定义与重载的方法。

注意

在实际操作中,颜色类需要错误检查,色彩空间转换,等等。这种过度简化的版本说明的重载方法的实现。

classdef颜色属性ColorValues = [0,0,0]的ColorSpace =“RGB”结束方法函数obj =颜色(cSpace、价值观)如果nargin> 0 obj.ColorSpace = cSpace;obj.ColorValues =值;结束结束结束方法(静态)函数z = 0(变长度输入宗量)如果(输入参数个数= = 0)%对于零(“类名”)Z =颜色;ELSEIF任何([{varargin:}] <= 0)%用于任何维度<= 0的零z = Color.empty(变长度输入宗量{:});其他的% 0 (m, n,…,“名称”)%用途属性的默认值z = repmat(颜色、变长度输入宗量{:});结束结束函数R =兰迪(varargin)如果(输入参数个数= = 0)兰迪%('名称')r =颜色(“RGB”兰迪(255年,[1,3]));ELSEIF任何([varargin {2:端}] <= 0)%对于任意维度<= 0的randiR = Color.empty(varargin {2:端});其他的兰迪% (max, m, n,…,“名称”)如果numel([{varargin:}])<2误差(“输入参数不够”结束dim =[变长度输入宗量{2}结束):;r = 0(变暗,“颜色”);对于K = 1:PROD(变暗)R(k)的=颜色(“RGB”,兰迪(varargin {1},[1,3]));结束结束结束结束方法(隐)函数Z = zerosLike(OBJ,varargin)如果输入参数个数= = 1%为0(‘喜欢’,obj)cSpace = obj.ColorSpace;z =颜色;z。色彩= cSpace;ELSEIF任何([{varargin:}] <= 0)%用于任何维度<= 0的零z = Color.empty(变长度输入宗量{:});其他的%对于零(M,N,..., '喜欢',OBJ)如果〜isscalar(OBJ)错误(“Prototype对象必须是标量”结束obj =颜色(obj.ColorSpace 0 (1、3、“喜欢”obj.ColorValues));z = repmat (obj,变长度输入宗量{:});结束结束结束结束

相关的话题