2010年7月7日水曜日

C++プログラマがLuaを勉強してみる第8回

◆クラス

---------------------------------------
--Characterクラスの定義
---------------------------------------
Character = {} --Characterクラス

--newメソッド
function Character:new(_character)

 obj = {}
 --メンバ変数の定義と初期化
 if _character then
  --コピーコンストラクタ的な処理
  obj.name = _character.name
  obj.age = _character.age
 else
  --デフォルトコンストラクタ適な処理
  obj.name = ""
  obj.age = 0
 end

 --Characterのメソッドをobjに設定
 --継承みたいな感じ
 self.__index = self
 setmetatable(obj, self)
 return obj
end

--setメソッド
function Character:set(_name, _age)
 self.name = _name
 self.age = _age
end

--__tostringメタメソッドのオーバーライド
function Character:__tostring()
 return "name:"..self.name.."\n".."age:"..self.age
end

--cloneメソッド
function Character:clone()
 return Character:new(self)
end

----------------------------------------
--クラスの使用
----------------------------------------
c = Character:new() --オブジェクトの生成
c:set("suzuki", 12) --データの設定
d = Character:new(c) --コピーコンストラクタの使用

print("--c--")
print(c)
print("--d--")
print(d)
print("\n")

c:set("suzuki_2", 24)
d:set("yamada", 55)
print("==c==")
print(c)
print("==d==")
print(d)
print("\n")

e = d:clone()
d:set("takeda", 77)
print("##d##")
print(d)
print("##e##")
print(e)

0 件のコメント:

コメントを投稿