Matlab类,混乱

时间:2015-04-09 03:44:08

标签: matlab class

嘿,我现在正在学习课程。

我不认为我对课程的理解是诚实的,但我不能从讲义中把握好。如果有人能给我一些关于我做错的提示,那将非常感激。

我需要输入一些内容:

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

有什么建议我错了,我能做什么,以及背后的原因?

谢谢!

1 个答案:

答案 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中的方法时,第一个参数需要是对该方法被调用的对象的引用。在您的情况下,看起来像manman包含对调用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.