主要内容

对象行为

两种复制行为

MATLAB有两种基本类型®对象-句柄和值。

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

手柄对象由其句柄变量引用。句柄变量的副本引用同一对象。对句柄对象执行的操作可以从引用该对象的所有句柄变量中看到。

句柄对象复制

如果要定义类并希望支持句柄对象复制,请参见金宝app实现句柄类的复制.

值对象复制行为

MATLAB数值变量是值对象。例如,当您复制A.到变量B,这两个变量彼此独立。更改A.不会更改的值B:

a=8;b=a;

现在重新分配A..B保持不变:

a=6;B
b=8

清理A.不影响B:

清楚的A.B
b=8

值对象属性

值对象中存储为属性的值的复制行为与数值变量相同vobj1是具有属性的值对象A.:

vobj1.a=8;

如果你复制vobj1vobj2,然后更改的值vobj1所有物A.,复制对象属性的值,vobj2.a,不受影响:

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

处理对象复制行为

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

classdefHdClass<句柄性质数据终止方法作用obj=HdClass(val)如果nargin>0对象数据=val;终止终止终止终止

创建此类的对象:

hobj1=HdClass(8)

由于此语句未以分号结尾,因此MATLAB显示有关对象的信息:

hobj1=HdClass,属性:数据:8

变量hobj1是引用所创建对象的句柄。正在复制hobj1hobj2导致另一个句柄引用同一对象:

hobj2=hobj1
hobj2=HdClass,属性:数据:8

因为句柄引用对象,所以复制句柄会将句柄复制到新的变量名,但句柄仍然引用相同的对象hobj1是具有属性的句柄对象数据:

B.数据
ans=8

更改hobj1数据属性和复制对象的数据属性也会发生变化:

hobj1.数据=5;B.数据
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;清除hobj1 hobj2
hobj2=HdClass,属性:数据:256

如果你两个都清除了hobj1hobj2,则没有对该对象的引用。MATLAB将销毁该对象并释放该对象使用的内存。

删除句柄对象

要删除由任意数量的句柄引用的对象,请使用删去鉴于hobj1hobj2,两者都引用同一对象,请删除任一句柄。MATLAB删除对象:

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

使用清楚的从工作区中删除变量。

修改对象

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

  • Value object—函数必须返回对象的修改副本。若要修改调用方工作区中的对象,请将函数输出分配给同名变量

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

测试句柄或值类

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

isa(obj,“把手”)

例如集装箱。地图类创建句柄对象:

hobj=containers.Map({“红袜队”,“北方佬”},{“波士顿”,“纽约”});isa(hobj,“把手”)
ans=1

霍布也是一个集装箱。地图对象:

isa(hobj,'containers.Map')
ans=1

查询霍布这表明它是一个集装箱。地图对象:

班级(hobj)
ans=容器。映射

这个函数返回对象的特定类。

相关话题