对象的行为

两个复制行为

有两种基本的MATLAB®对象——句柄和值。

对于复制操作,对象的行为类似于MATLAB基本类型。副本是独立的值。对一个对象执行的操作不会影响该对象的副本。

处理对象由它们的句柄变量引用。句柄变量的副本引用同一个对象。对句柄对象执行的操作在引用该对象的所有句柄变量中都是可见的。

处理对象副本

如果您正在定义类并希望支持句柄对象复制,请参阅金宝app实现句柄类的拷贝

值对象复制行为

MATLAB数字变量值的对象。例如,当您复制一个给变量b,这两个变量是彼此独立的。改变的价值一个值不变吗b:

= 8;B = A;

现在重新分配一个b是不变的:

一个= 6;b
b = 8

清算一个不影响b:

明确一个b
b = 8

值对象属性

值对象中存储为属性的值的复制行为与数值变量相同。例如,假设vobj1值对象是否带有属性一个:

vobj1。= 8;

如果复制vobj1vobj2,然后更改的值vobj1财产一个,复制对象属性的值,vobj2.a,不受影响:

vobj2 = vobj1;vobj1.a = 5;vobj2.a
ans = 8

处理对象复制行为

这里有一个句柄类HdClass它定义了一个名为属性数据

classdefHdClass <处理性能数据结束方法功能obj = HdClass (val)如果nargin > 0 obj。数据= val;结束结束结束结束

创建这个类的对象:

hobj1 = HdClass(8)

因为这个语句没有以分号结束,MATLAB显示了关于对象的信息:

hobj1 = HdClass具有属性:数据:8

变量hobj1是引用创建的对象的句柄。复制hobj1hobj2结果是另一个句柄引用相同的对象:

hobj2 = hobj1
属性:Data: 8的HdClass

因为句柄引用对象,所以复制句柄会将句柄复制到新的变量名,但句柄仍然引用相同的对象。举个例子hobj1是与物业的处理对象数据:

hobj1.Data
ans = 8

改变的值hobj1数据属性和复制对象的值数据财产也在改变:

hobj1.Data = 5;hobj2.Data
ans = 5

因为hobj2hobj1都是同一个对象的句柄,改变了拷贝,hobj2,也改变了你通过句柄访问数据hobj1:

hobj2.Data= 17; hobj1.Data
ANS = 17

重新分配句柄变量

重新分配句柄变量与重新分配任何MATLAB变量产生的结果相同。当您创建一个对象并将其分配给hobj1:

hobj1 = HdClass (3.14);

hobj1引用新对象,而不是先前引用的同一对象(仍然由hobj2)。

清算处理变量

当您从工作空间中清除一个句柄时,MATLAB会删除该变量,但不会删除另一个句柄引用的对象。但是,如果没有对对象的引用,MATLAB将销毁该对象。

鉴于hobj1hobj2,这两个参考相同的对象,可以清除或者手柄不会影响对象:

hobj1.Data= 2^8; clear hobj1 hobj2
属性:数据:256的HdClass

如果同时清除hobj1hobj2,然后有对对象的引用。MATLAB销毁对象并释放由该对象所使用的存储器。

删除处理对象

若要删除由任意数量句柄引用的对象,请使用删除。鉴于hobj1hobj2,它们都引用同一个对象,删除其中一个句柄。MATLAB删除对象:

hobj1 = HdClass (8);hobj2 = hobj1;删除(hobj1) hobj2
hobj2 =句柄删除HdClass

明确从工作空间中删除变量。

修改对象

当您将对象传递给函数时,MATLAB将对象的副本传递给函数工作区。如果函数修改了对象,MATLAB只修改函数工作区中对象的副本。在这种情况下,句柄类和值类之间的复制行为差异非常重要:

  • 值对象 - 函数必须返回对象的修改后的副本。要修改在呼叫方的工作区中的对象,则该函数输出分配给相同的名称的变量

  • 句柄对象——函数工作区中的副本引用相同的对象。因此,函数不必返回修改后的副本。

测试句柄或值类

若要确定对象是否是句柄对象,请使用isa函数。如果obj是某个类的对象,此语句确定是否obj是一个句柄:

isa (obj,“处理”)

例如,containers.Map类创建一个句柄对象:

hobj = containers.Map ({“红袜队”,“洋基},{“波士顿”,'纽约'});isa (hobj“处理”)
ans = 1

hobjcontainers.Map宾语:

isa (hobj containers.Map)
ans = 1

查询的类hobj表明,它是一个containers.Map宾语:

类(hobj)
ANS = containers.Map

函数返回对象的特定类。

相关话题