我有一些C ++的背景,并希望在Matlab使用类。
是什么手柄和值类之间的区别?
我知道,我会用一个值类,如果我想定义与重载运算矩阵类,如“+”和“*”。 然而,有时似乎只事情对我的工作,我希望当我拿起一个手柄类。
我有一些C ++的背景,并希望在Matlab使用类。
是什么手柄和值类之间的区别?
我知道,我会用一个值类,如果我想定义与重载运算矩阵类,如“+”和“*”。 然而,有时似乎只事情对我的工作,我希望当我拿起一个手柄类。
The MathWorks公司提供用于该目的,其对一些信息的帮助 ,并在他们的PDF文档 。 我还发现这篇文章从Yagtom项目 (最初由马特·邓纳姆 )是一个伟大的介绍在MATLAB中面向对象编程。
在帮助这说明如下(重点煤矿):
MATLAB:支持两种类 - 处理类和价值类。 您使用的那种类依赖于类实例的期望的行为,你想用什么功能。
当你想创建中所含的类的对象数据的引用使用手柄类 ,不希望对象的副本,使对象数据的副本。 例如,使用一个手柄类来实现,它包含了电话簿条目信息的对象。 多个应用程序可以访问特定电话簿条目,但只能有一组基础数据的。
手柄的参考行为使这些类支持类似事件,监听器,和动态性能特点。
使用值类来表示不需要是唯一的,就像数值实体。 例如,使用一个值的类来实现的多项式的数据类型。 您可以复制
在文章由马特·邓纳姆,另一个好点作为区分这两种类型的类:
我们之前提到,在Matlab的对象,(默认) 值传递的 ,这意味着全副本在方法调用来回传递。 Matlab的图形对象,但是, 通过引用传递 ,(经由把手)。 如果我们继承内置手柄类[...]那么,我们的类的对象将通过引用传递过,没有价值。
我个人倾向于使用手柄类来获得一些我已经习惯了与Java的语法:一个手柄类,你可以有对象存储的所有信息,这样你可以有一个像操作sort(a)
(或a.sort()
来代替执行。 对于值类这相当于是a = sort(a)
或a = a.sort()
对于运营商所述第一语法是没有意义的,在所有,但第二显然是在一般使用:例如a = a + b
(这相当于a = plus(a,b)
和a = a.plus(b)
)。
或者至少,这就是我倾向于使用做出区分。
这其实很简单,而且比你注意语言不同。 句柄类获得通过引用传递。 值类通过值。 从C / C ++所不同的是机构是类型系统,而不是可以在任何变量执行的操作的一部分。