2016-08-26 17 views
1

私はライブラリとブックの2つのクラスを定義しました。図書館には名前と本があります。本には名前と著者があります。私は図書館に図書を追加する図書館のクラスのメソッドを持っています。matlabクラスにアイテムを追加します

classdef library 
properties 
    name 
    books=book.empty 
end 
methods 
    function self=library(val1) 
    self.name=val1; 
    end 
    function addbook(self,item) 
     self.books(end+1)=item; 
    end 
end 

エンド

と書籍

classdef book 
    properties 
     author 
     title 
    end 
    methods 
     function self=book(val1,val2) 
      self.author=val1; 
      self.title=val2; 
     end 
    end  
end 

を次のように彼らは私が私のaddbookメソッドを使用して、私のライブラリにこの本を追加したい場合は今、私は

lib1=library('Leib') 

book1=book('A','T') 

を定義していますそれは騒がしくない。図書館は空のままです

lib1.addbook(book1) 

lib1 = 

    library with properties: 

    name: 'Leib' 
    books: [] 

ご協力いただけると助かります。

答えて

0

あなたaddbook方法でエラーを持っている - それはつまり、あなたはまた、ハンドルクラスまたは値クラスの違いを見ている

function self = addbook(self,item) 
    self.books(end+1)=item; 
end 

自己を返していない、にhere for mathworks explanation

を見ますどちらかそれを解決:

lib1 = lib1.addbook(book1); 

をしたり、ハンドルのクラスから派生するためにあなたのライブラリクラスを変更

classdef library < handle 
    ... 
end 
0

Matlabオブジェクトは(デフォルトでは)参照ではありません。つまり、オブジェクトのコピーを明示的に返して設定する必要があります。その後

function newLib = addbook(self,item) 
    self.books(end+1)=item; 
    newLib = self; 
end 

lib2 = lib1.addbook(book1); 

つまり、あなたはaddbookを呼び出すことによって変更でLIB1のコピーを返し、LIB1とLIB2が同じクラスで異なるオブジェクトであることに留意すべきです。オブジェクトの動作を参照したい場合は、ハンドルクラスからサブクラス化してください。第一

関連する問題