我刚开始学习Matlab面向对象编程,我想为一个对象编写一个设置方法,该方法将设置该值,然后通过在其他对象上相关字段中设置自身来实现倒数。
classdef Person
properties
age;
sex;
priority; % net priority based on all adjustment values
adjustment; % personal adjustment value for each interest
family;
end
methods
function obj = set.sex(obj, value)
if value == 'm' || value == 'f'
obj.sex = value;
else
error('Sex must be m or f')
end
end
function obj = set.family(obj,value)
if class(value) == 'Family'
obj.family = value;
else
error('Family must be of type Family')
end
end
end
end
classdef Family
properties
husband;
wife;
children;
elders;
adjustment; % interest adjustment values
end
methods
function this = set.husband(this,person)
if class(person) == 'Person'
this.husband = person;
person.family = this;
else
error('Husband must be of type Person')
end
end
function this = set.wife(this,person)
if class(person) == 'Person'
this.wife = person;
person.family = this;
else
error('Wife must be of type Person')
end
end
end
end
现在我需要做的是:
p = Person
f = Family
f.husband = p
p.family = f
我希望家庭和个人能够自动在彼此之间进行设置。
p = Person
f = Family
f.husband = p
Family set.husband函数将设置p的家庭值为f。为什么我的代码不起作用?据我所知,我正在按照评论中建议的方式进行操作。
编辑: 经过一些尝试后,我确认“this”和“person”是正确类型的对象。最终问题在于Matlab通过值传递而不是通过引用传递。除非有人知道解决方法,否则我会在可以时自己回答。
Family
类中使用设置器方法,例如setHusband(p)
,在其中将当前Family
对象的husband
属性以及输入对象p
的family
属性设置为相应值。 - BeePerson
和Family
类设置为handle
对象可以解决按引用传递的问题?只需在类的定义中添加< handle
即可:http://www.mathworks.com/help/matlab/matlab_oop/comparing-handle-and-value-classes.html - Bee