嘿,我现在正在学习课程。
我不认为我对课程的理解是诚实的,但我不能从讲义中把握好。如果有人能给我一些关于我做错的提示,那将非常感激。
我需要输入一些内容:
man = Dumbo('Fred', 10);
fprintf('%s is %d years old.\n', man.name, man.age);
olderMan = man.olderBy(5); % Get a new older man
fprintf('Older %s is %d years old.\n', ...
olderMan.name, olderMan.age);
获得输出:
弗雷德已经10岁了。 年长的弗雷德已经15岁了。
到目前为止,我已经开始制作第一行,但是第二行没有工作,出现错误说:
使用Dumbo / olderBy
时出错输入参数太多。
这是我的代码:
classdef Dumbo
%used to find details of a man and an older man
properties
name = 'noName'
age= 0
end
methods
function man=Dumbo(name,age)
man.name = name;
man.age = age;
end
function olderMan = olderBy(years)
olderMan.name = man.name
olderMan.age = man.age + years
end
end
end
有什么建议我错了,我能做什么,以及背后的原因?
谢谢!
答案 0 :(得分:2)
非常简单的错误。您忘记将man
或调用方法的当前对象作为olderBy
的输入参数包含在内。此外,您在上述代码中实际执行的操作是返回struct
(感谢@SamRoberts!)。我的猜测是你想要修改字段的另一个实例,所以你应该做的是创建另一个单独的对象实例。完成后,修改此实例并将其返回给用户。这可以通过在函数开头执行olderMan = man;
来完成。
因此:
function olderMan = olderBy(man,years) %// Change here
olderMan = man; %// Change
olderMan.name = man.name
olderMan.age = man.age + years
end
当您处理MATLAB OOP中的方法时,第一个参数需要是对该方法被调用的对象的引用。在您的情况下,看起来像man
。 man
包含对调用olderBy
的对象的引用,这对于与Dumbo
相关的所有方法都是必需的。我还建议您在班级的每个陈述的末尾放置分号。这样,每个语句后都不会回显输出....所以:
function olderMan = olderBy(man,years) %// Change here
olderMan.name = man.name;
olderMan.age = man.age + years;
end
运行上面的代码,我得到:
Fred is 10 years old.
Older Fred is 15 years old.