文档

类支持数组创金宝app建功能

扩展类的数组创建函数

这里有几个例子®该创建一个特定大小和类型的数组的功能,如那些0.用户定义的类可以无需使用重载方法语法的添加对数组创建函数的金宝app支持。

类对任何数组金宝app创建函数的支持使您能够开发可以与内置数据类型和用户定义数据类型共享的代码。例如,变量的类x在下面的代码可以是一个内置的初始开发期间类型,然后由用户定义的类来代替该透明重载0

CLS =类(x)的;z阵列=零(M,N,CLS);

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

  • 类名语法——指定确定数组元素类型的类名。

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

例如:

z阵列=零(2,3,“uint8”);
P = UINT8([1 3 5 2 4 6]);z阵列=零(2,3,'喜欢',P);

将对这些函数的支持添加到名金宝app为MyClass,你可以对该类使用类似的语法:

z阵列=零(2,3,'我的课');

或者通过你的类的对象:

P = MyClass的(...);z阵列=零(大小(P),'喜欢',P);

MATLAB使用这些参数来分派到类中的适当方法。

支持重载的数组创建函数金宝app

下面的函数支持这种重载。金宝app

数组创建函数
那些
0
眼睛
(小写)
INF
真的
投掷
兰德
randn
兰迪

其语法使用

要创建缺省对象,这需要构造没有输入参数的数组,然后使用类名语法。

创建对象的具有特定属性值的数组,或者如果构造函数需要其他输入,使用原型目的是提供此信息。

类可以同时支持类名和原型金宝app对象语法。

属性可以实现类名语法真的函数,尽管这些函数在默认情况下不支持该语法。金宝app

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

如果您的类实现一个类名的语法,但没有实现特定功能的原型对象的语法,你仍然可以调用两种语法。例如,如果你执行一个静态0唯一的方法,您可以拨打:

零(...'喜欢',MyClass(…)

在其中调用原型对象语法的情况下,MATLAB的方法首先搜索命名zerosLike.如果MATLAB无法找到这个方法,它要求0静态方法。

如果您只需要类名来创建数组,则此特性非常有用。您不需要同时实现这两种方法来支持完整的数组创建函数语法。金宝app当只实现类名语法时,对原型对象语法的调用与对类名语法的调用是相同的。

落实支持数组创建功能金宝app

使用两个独立的方法来支持数组创建函数。金宝app一个方法实现类名语法,另一个实现原型对象语法。

例如,支持金宝app0功能:

  • 实现类名语法:

    0(…”类名称')

    作为一个静态方法:

    方法(静止的)功能Z = 0 (varargin)…结束结束
  • 实现原型对象语法:

    零(...'喜欢'obj)

    作为一个方法与烧焦向量'喜欢'附加在名称后面。

    方法(隐藏)功能z=zerosLike(obj,varargin)。。。结束结束

如何马铃薯解释函数调用

对数组创建函数的特殊支持金宝app源于对语法的解释。

  • 呼叫到0这种形式的功能:

    零(...类名称)

    调用这个语法类的静态方法:

    类名称.zeros(varargin {1:端-1})
  • 呼叫到0这种形式的功能:

    零(...'喜欢'obj)

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

    zerosLike (obj,变长度输入宗量{1:end-2})

金宝app支持所有功能的输入

的输入参数的阵列创建功能可以包括该阵列的尺寸的函数返回和可能的其它参数。一般来说,有三种情况,你的方法必须支持:金宝app

  • 无尺寸输入参数产生一个标量的回归。例如:

    z = 0 ('我的课');
  • 等于或小于零的一维或多个维,导致空数组。例如:

    Z =零(2,0,'我的课');
  • 任意数量的有效阵列的尺寸的指定数组的大小。例如:

    z = 0(2、3、5,'我的课');

当数组创建函数调用你的类方法,它通过输入参数,不包括类名或字面'喜欢'以及方法的对象变量。你可以用这些签名来实现你的方法:

  • 零(varargin)用于“类名”方法

  • 0 (obj,变长度输入宗量)为“像原型对象”的方法

样品类

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

classdef颜色性质= [0,0,0] [0,0,0'RGB'结束方法功能OBJ =颜色(cSpace,值)如果Nargin > 0 obj。色彩= cSpace; obj.ColorValues = values;结束结束结束结束

类名方法实现

0函数去掉final类名称烧焦向量,并用它来形成呼叫在静态方法颜色类。传递给静态方法的参数是数组维度参数。

这里是一个的实现0方法颜色类。这个实现:

  • 定义了0方法静态(必需)

  • 返回一个标量颜色对象,如果调用0无量纲参数

  • 如果调用,则返回空数组0具有任何等于0的维度参数。

  • 返回一个默认数组颜色对象。用雷普马特创建由呼叫到所指定的尺寸的阵列0

classdef颜色...方法(静止的)功能Z =零(varargin)如果(nargin == 0)%对于零(“颜色”)z =颜色;elseif任何([变长度输入宗量{}):< = 0)%对于任何尺寸的零<= 0Z = Color.empty(varargin {:});别的%对于零(M,N,..., '颜色')%使用属性默认值Z = repmat(彩色,varargin {:});结束结束结束结束

0方法使用默认值ColorValues属性,因为这些值适合于此应用程序。的实现那些方法可以设置ColorValues财产[1,1,1], 例如。

假设你想重载兰迪功能实现以下目标:

  • 定义每个ColorValue属性为1 × 3数组,范围为1到指定的最大值(例如,1- 255)。

  • 适应标量、空和多维数组大小。

  • 返回颜色指定尺寸的对象,每一个随机ColorValues

classdef颜色...方法(静止的)功能r =兰迪(变长度输入宗量)如果(nargin == 0)%对于兰迪(“类名”)R =颜色('RGB',兰迪(255,[1,3]));elseif任何([变长度输入宗量{2}结束):< = 0)%对于具有任何尺寸兰迪<= 0r = Color.empty(变长度输入宗量{2:结束});别的%对于兰迪(最大,M,N,..., '类名')如果Numel ([varargin{:}]) < 2错误('没有足够的输入参数')结束DIMS = [varargin {2:端}];R =零(变暗,'颜色');k = 1:prod(dims) r(k) = Color('RGB'兰迪(变长度输入宗量{1},[1,3]));结束结束结束结束结束

原型对象方法实现

返回“类似于原型对象”的对象数组的方法的目标取决于类的需求。为颜色课堂上,zeroLike方法创建具有对象色彩属性的值,但是ColorValues都是零。

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

  • 定义了zerosLike方法

  • 返回一个标量颜色对象如果调用0函数无量纲参数

  • 返回一个空数组,如果调用0函数具有任何尺寸参数是负​​或等于0。

  • 返回颜色的调用指定的维度的对象0函数。

classdef颜色...方法(隐藏)功能z = zerosLike (obj,变长度输入宗量)如果nargin == 1%对于零( '喜欢',OBJ)cSpace = obj.ColorSpace;z =颜色;z.ColorSpace = cSpace;elseif任何([变长度输入宗量{}):< = 0)%对于任何尺寸的零<= 0Z = Color.empty(varargin {:});别的% 0 (m, n,…,“喜欢”,obj)如果~ isscalar (obj)错误('Prototype对象必须是标量')结束OBJ =颜色(obj.ColorSpace,零(1,3,'喜欢',obj.ColorValues));Z = repmat(OBJ,varargin {:});结束结束结束结束

完整的类清单

这里是颜色使用重载方法定义类。

请注意

在实际操作中,颜色类需要错误检查、颜色空间转换等。这个过于简化的版本演示了重载方法的实现。

classdef颜色性质= [0,0,0] [0,0,0'RGB'结束方法功能OBJ =颜色(cSpace,值)如果Nargin > 0 obj。色彩= cSpace; obj.ColorValues = values;结束结束结束方法(静止的)功能Z =零(varargin)如果(nargin == 0)% 0('名称')z =颜色;elseif任何([变长度输入宗量{}):< = 0)%对于任何尺寸的零<= 0Z = Color.empty(varargin {:});别的%对于零(M,N,..., '类名')%使用属性默认值Z = repmat(彩色,varargin {:});结束结束功能r =兰迪(变长度输入宗量)如果(nargin == 0)%对于兰迪(“类名”)R =颜色('RGB',兰迪(255,[1,3]));elseif任何([变长度输入宗量{2}结束):< = 0)%对于具有任何尺寸兰迪<= 0r = Color.empty(变长度输入宗量{2:结束});别的%对于兰迪(最大,M,N,..., '类名')如果Numel ([varargin{:}]) < 2错误('没有足够的输入参数')结束DIMS = [varargin {2:端}];R =零(变暗,'颜色');k = 1:prod(dims) r(k) = Color('RGB'兰迪(变长度输入宗量{1},[1,3]));结束结束结束结束方法(隐藏)功能z = zerosLike (obj,变长度输入宗量)如果nargin == 1%对于零( '喜欢',OBJ)cSpace = obj.ColorSpace;z =颜色;z.ColorSpace = cSpace;elseif任何([变长度输入宗量{}):< = 0)%对于任何尺寸的零<= 0Z = Color.empty(varargin {:});别的% 0 (m, n,…,“喜欢”,obj)如果~ isscalar (obj)错误('Prototype对象必须是标量')结束OBJ =颜色(obj.ColorSpace,零(1,3,'喜欢',obj.ColorValues));Z = repmat(OBJ,varargin {:});结束结束结束结束

相关话题