这里有几个例子®该创建一个特定大小和类型的数组的功能,如那些
和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对象语法。
属性可以实现类名语法真的
和假
函数,尽管这些函数在默认情况下不支持该语法。金宝app
如果您的类实现一个类名的语法,但没有实现特定功能的原型对象的语法,你仍然可以调用两种语法。例如,如果你执行一个静态0
唯一的方法,您可以拨打:
零(...'喜欢',MyClass(…)
在其中调用原型对象语法的情况下,MATLAB的方法首先搜索命名zerosLike
.如果MATLAB无法找到这个方法,它要求0
静态方法。
如果您只需要类名来创建数组,则此特性非常有用。您不需要同时实现这两种方法来支持完整的数组创建函数语法。金宝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
无尺寸输入参数产生一个标量的回归。例如:
z = 0 ('我的课');
等于或小于零的一维或多个维,导致空数组。例如:
Z =零(2,0,'我的课');
任意数量的有效阵列的尺寸的指定数组的大小。例如:
z = 0(2、3、5,'我的课');
当数组创建函数调用你的类方法,它通过输入参数,不包括类名或字面'喜欢'
以及方法的对象变量。你可以用这些签名来实现你的方法:
零(varargin)
用于“类名”方法
0 (obj,变长度输入宗量)
为“像原型对象”的方法
的颜色
类表示在一个特定的色空间的颜色,如,RGB
,HSV
,等等。的讨论类名方法实现和原型对象方法实现使用这个类作为用于重载方法实现的基础。
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 {:});结束结束结束结束