复制对象
两种复制行为
有两种基本类型的MATLAB®对象——处理和价值观。
价值对象像MATLAB基本类型对复制操作。副本是独立的价值观。一个对象上执行的操作不会影响该对象的副本。
处理处理对象引用的变量。处理变量引用同一个对象的副本。您执行的操作的处理对象是可见的所有处理变量引用该对象。
处理对象副本
如果你在定义类和想支持处理对象副本,明白了金宝app为处理类实现复制。
值对象复制行为
MATLAB数值变量值对象。例如,当你复制一个
对该变量b
,这两个变量是相互独立的。改变的价值一个
不会改变的价值b
:
= 8;b =一个;
现在重新分配一个
。b
是不变的:
= 6;b
b = 8
清算一个
不影响b
:
清晰的一个b
b = 8
对象属性值
值存储为属性值的复制行为对象是一样的数值变量。例如,假设vobj1
是一个与属性值对象一个
:
vobj1。= 8;
如果你复制vobj1
来vobj2
,然后改变的价值vobj1
财产一个
复制对象的属性的值,vobj2.a
影响:
vobj2 = vobj1;vobj1。一个= 5; vobj2.a
ans = 8
处理对象复制行为
这是一个处理类HdClass
定义了一个属性数据
。
classdefHdClass <处理属性数据结束方法函数obj = HdClass (val)如果输入参数个数> 0 obj。数据= val;结束结束结束结束
创建这个类的一个对象:
hobj1 = HdClass (8)
因为这句话不是分号终止,MATLAB显示的信息对象:
hobj1 = HdClass属性:数据:8
的变量hobj1
是一个句柄引用对象创建。复制hobj1
来hobj2
结果在另一个处理指的是相同的对象:
hobj2 = hobj1
hobj2 = HdClass属性:数据:8
因为句柄引用对象,复制句柄复制处理一个新的变量名称,但仍然处理指的是同一个对象。例如,考虑到hobj1
是一个处理对象与属性数据
:
hobj1.Data
ans = 8
变化的值hobj1
的数据
复制对象的属性和值数据
财产也在改变:
hobj1.Data= 5; hobj2.Data
ans = 5
因为hobj2
和hobj1
处理同一个对象,改变复制,hobj2
通过处理,也改变了数据访问hobj1
:
hobj2.Data= 17; hobj1.Data
ans = 17
重新分配处理变量
重新分配一个句柄变量产生相同的结果重新分配任何MATLAB变量。当你创建一个对象,并将其分配给hobj1
:
hobj1 = HdClass (3.14);
hobj1
引用新对象,而不是同一对象以前(现在仍然引用的引用hobj2
)。
清算处理变量
当你明确处理从工作区,MATLAB消除了变量,但不删除对象引用的其他处理。然而,如果没有一个对象的引用,MATLAB破坏对象。
鉴于hobj1
和hobj2
都引用同一个对象,您可以明确处理而不影响对象:
hobj1.Data= 2^8; clear hobj1 hobj2
hobj2 = HdClass属性:数据:256
如果你都清楚hobj1
和hobj2
,然后没有对对象的引用。MATLAB破坏对象,并释放该对象使用的内存。
删除处理对象
删除一个对象引用的任何数量的把手,使用删除
。鉴于hobj1
和hobj2
,都引用同一个对象,删除处理。MATLAB删除对象:
hobj1 = HdClass (8);hobj2 = hobj1;删除(hobj1) hobj2
删除HdClass hobj2 =处理
使用清晰的
从工作区中删除变量。
修改对象
当你将对象传递给一个函数,MATLAB的副本对象传递到函数的工作区。如果函数修改对象,MATLAB只修改复制对象的函数空间。复制行为处理与价值之间的差异类是重要的在这种情况下:
值对象,对象的函数必须返回修改后的副本。修改对象在调用者的工作区,分配输出一个变量同名的函数
处理函数空间中的对象——复制指的是同一个对象。因此,函数没有返回修改后的副本。
测试处理类或价值
可以确定一个对象是一个处理对象,使用isa
函数。如果obj
是一个对象的类,该语句判断吗obj
是一个处理:
isa (obj,“处理”)
例如,containers.Map
类创建一个处理对象:
hobj = containers.Map ({“红袜队”,“洋基},{“波士顿”,“纽约”});isa (hobj“处理”)
ans = 1
hobj
也是一个containers.Map
对象:
isa (hobj containers.Map)
ans = 1
查询的类hobj
表明这是一个containers.Map
对象:
类(hobj)
ans = containers.Map
的类
函数返回对象的特定类。