手柄和值类的差异手柄和值类的差异(Difference of handle and values c

2019-05-12 02:00发布

我有一些C ++的背景,并希望在Matlab使用类。

是什么手柄和值类之间的区别?

我知道,我会用一个值类,如果我想定义与重载运算矩阵类,如“+”和“*”。 然而,有时似乎只事情对我的工作,我希望当我拿起一个手柄类。

Answer 1:

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) )。

  • 如果你的类的主要关注点是存储某种(数字)值,并能够进行操作,值类是最容易走的路。
  • 如果你想存储的状态,组相关的值,连接不同的物体放在一起(链表,图表,...),手柄类可能是要走的路。

或者至少,这就是我倾向于使用做出区分。



Answer 2:

这其实很简单,而且比你注意语言不同。 句柄类获得通过引用传递。 值类通过值。 从C / C ++所不同的是机构是类型系统,而不是可以在任何变量执行的操作的一部分。



文章来源: Difference of handle and values classes
标签: matlab oop