处理类对象之间串音?

1视图(30天)
Joschi
Joschi 2017年3月30日
评论道: Joschi2017年4月6日
我创建了一个抽象超类 MySuperClass 本身是来自哪一个 matlab.mixin.Copyable 。这个超类提供了一个 setValue(行、列值) 和一个相应的 getValue(行、列) 函数。我从这个超类派生一个次级类 MyClass 其构造函数需要两个整数。
由……
一个= MyClass (1、2);
b = MyClass (1、2);
…我创建了两个对象的类。 isa (a,“处理”) 返回逻辑真的——相同 b ——确认这两个对象是处理对象。
为…
a = =
…(逻辑)返回0,我知道这些都是独立的处理,即。、独立的对象。后创建的对象 isequal (a, b) 返回逻辑1。
现在,奇怪的事情发生了:
一个。setValue (1、5);%设置第一行,第一列的值为5
b。setValue (1, 1, 3);%设置第一行,第一列的b值为3
一个。getValue (1,1)
- > 3
所以,有一些“相声”这些对象,尽管他们之间是独立的。
你能解释为什么?发生这种情况,如何?为了摆脱这种行为。? ? ?我迷路了。
我用Matlab R2016b(9.1.0.441655)在64位Windows。
请,Joschi
1评论
Varun Gunda
Varun Gunda 2017年4月6日
你可以共享整个代码吗?这不是预期的行为。可能是你的代码是少了什么!

登录置评。

接受的答案

亚当
亚当 2017年4月6日
这完全取决于你的setValue getValue功能,但飞行猜……
如果你声明一个属性实际上是一个处理对象和你创建这个属性块中,对象都具有相同的对象,因为属性块初始化评估一次 每个类 不是每个对象。
如果是有它的价值的东西是一些处理类的初始化的对象存储在mySuperClass房地产阻止这种行为会发生,因为他们将分享相同的实际对象的引用。
1评论
Joschi
Joschi 2017年4月6日
你好亚当,非常感谢你的回复。
这种“奇怪的”行为的原因的确是一个受保护的财产也来源于“处理”入住。
祝你有美好的一天,Joschi

登录置评。

更多的答案(0)

类别

找到更多的在属性帮助中心文件交换

标签

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!