3

让我们直接进入代码。有两个班。超类是

classdef Parent
  methods
    function this = Parent()
    end

    function say(this, message)
      fprintf('%s\n', message);
    end
  end
end

子班是

classdef Child < Parent
  methods
    function this = Child()
      this = this@Parent();
    end

    function say(this, message)
      for i = 1
        % This one works...
        say@Parent(this, message);
      end

      parfor i = 1
        % ... but this one does not.
        say@Parent(this, message);
      end
    end
  end
end

问题是:如何在不引入任何其他方法的情况下使第二个循环工作?至于现在,它会引发一个错误,说“只能从同名的子类方法中显式调用基类方法”。谢谢你。

问候,伊万

4

1 回答 1

1

我认为您可能需要在调用循环之前显式this转换为,然后显式调用该方法:ParentparforParentsay

this2 = Parent(this);
parfor i = 1:1
  say(this2, message);
end

为此,您需要修改 的构造函数Parent以接受输入参数:

function this = Parent(varargin)
    if nargin == 1
        this = Parent();
    end
end

如果Parent并且Child具有属性,就像您的真实类可能那样,您将在语句之后包含一些代码if,将Childs 属性分配给新构造的Parent对象。

于 2013-01-10T10:11:04.680 回答