MATLAB关于类的问题!

classdefmyclasspropertiesmynum;endmethodsfunctionobj=myclass()obj.mynum=1;endfuntiona... classdef myclass
properties

mynum;

end

methods

function obj=myclass()
obj.mynum=1;

end

funtion addone()

mynum=mynum+1;
end

end

end
我是这么调用的:
sl=myclass();%此时对象中mynum=1
sl.addone();%报错!我希望能实现此时sl对象中的mynum=2
sl.addone();%这里我希望能mynum=3
怎么实现啊!大神们快来帮帮小弟啊~
展开
 我来答
tianxiawulang
2013-01-26 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2641万
展开全部
问题:
1、第二个function写错了(少了个c);
2、addone函数应该带输入参数obj;
3、执行的结果应该返回(否则应使用set.<Prop>的方式)。

简单做了点改写(肯定不算太好,仅供参考):
classdef myclass
properties
mynum;
end

methods
function obj=myclass()
obj.mynum=1;
end

function obj=addone(obj)
obj.mynum=obj.mynum+1;
end
end
end

调用:
sl=myclass();%此时对象中mynum=1
sl=sl.addone();%此时sl对象中的mynum=2
sl=sl.addone();%这里mynum=3
追问
你好,谢谢你的回答!我还有两个问题:
1.这里addone(obj)有obj的参数,但是调用的时候却没有参数,是为什么呢?
function obj=addone(obj)
obj.mynum=obj.mynum+1;
end
2.能不能不带返回的实现addone呢
追答
首先,抱歉过了好几天才回答。

这两个问题问的很好。
我以前在MATLAB中很少用类,所以你问的两个问题,对我而言也是很想知道但又不太确定答案是什么,这几天认真看了相关的文档,算是找到确切的答案了(这也是回答比较晚的原因)。

1、MATLAB类的成员函数(称为方法method)支持两种调用方式,即Dot Notation和Function Notation,例如
sl.addone(); % Dot Notation
addone(sl); % Function Notation

这两种调用方式在绝大多数情况下等效,但存在一些小的差别,某些特定情况下可能会导致不同的结果(对于我们这个简单的例子不存在这样的问题)。

2、MATLAB支持两种类:值类(value class)和句柄类(handle class)。默认情况下定义的属于值类,这种类作为参数来调用函数时,会创建对象的副本,要想得到修改后的结果,则必须作为参数返回,就像上面的做法。

另一种类——句柄类,则是你想要的。这种类的对象作为参数来调用函数时,传递的是句柄,相当于C++语言中的引用,不需要通过返回参数即可直接修改对象。句柄类必须显式定义为抽象类handle的子类,例如,把上面程序的第一行改成
classdef myclass < handle
就可以不带返回的实现addone了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式