3

コードに直接アクセスしましょう。2つのクラスがあります。スーパークラスは

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

問題は、追加のメソッドを導入せずに2 番目のループを機能させるにはどうすればよいかということです。今のところ、「基本クラスのメソッドは、同じ名前のサブクラスのメソッドからのみ明示的に呼び出すことができます」というエラーが発生します。ありがとうございました。

よろしく、イワン

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コードを含めることになります。ifChildParent

于 2013-01-10T10:11:04.680 に答える