2016-09-30 6 views
0

初期化せずにコンストラクタを定義できるC++に似ていますが、Matlabで行うことはできますか?classdef?私は試しましたが、 "テストが既に定義されています"という文句を言います。つまり、同じ名前の2つの関数を定義することはできません。プロパティを初期化しないMatlabクラスのコンストラクタ

classdef Test 
    properties 
     id; 
    end 
    methods 
     %constructor without initialization 
     function obj = Test 
     end 

     %constructor with initialization 
     function obj = Test(x) 
      obj.id = x; 
      end 
     end 

end 

答えて

2

あなたのコンストラクタ定義は入力引数を指定することができ、技術的にはユーザーが渡す必要はありません。入力変数名にexistを使用して、入力が提供されたかどうかを判断し、入力が提供されている場合にのみプロパティ値を割り当てます。

classdef Test 
    properties 
     id; 
    end 

    methods 
     function obj = Test(x) 
      if exist('x', 'var') 
       obj.id = x; 
      end 
     end 
    end 
end 
+0

ありがとうございました。どのidに複数のpropoertiesがあるか、Test(x、y)exist()を変更する方法を教えてください。 – daydayup

+0

@daydayup 'exist'についてはドキュメントを見ることができますが、' y'にもう一つの 'if exist( 'y'、 'var')'を追加することができます – Suever

+0

OK。どうもありがとう! – daydayup

関連する問題