Lua 物件導向(class)

2021-10-03 12:14:32 字數 1214 閱讀 6331

(一)class() 定義純 lua 類

基類:

--定義乙個名為 shape 的基礎類

local shape = class("shape") --這是乙個純lua類

--ctor()是類的建構函式,在呼叫shape.new()建立shape物件例項時自動呼叫

function shape:ctor( shapename )

self.shapename = shapename

printf("shape:ctor(%s)", self.shapename)

endfunction shape:initview()

printf("draw %s", self.shapename)

endreturn shape

派生類:

local circle = class("circle",require("shape"))

function circle:ctor( ... )

-- 如果繼承類覆蓋了 ctor() 建構函式,那麼必須手動呼叫父類建構函式

-- 類名.super 可以訪問指定類的父類

--在用super獲取到基類物件的時候,函式傳遞要將自己傳入self

--因為lua中所有的成員,函式都已經儲存在派生類中了,基類呼叫不到

self.super.ctor(self)

--呼叫派生類中的函式

self:initview()

--呼叫基類中的函式

self.super:initview()

end--覆蓋父類的同名方法

function circle:initview()

endreturn circle

(二)class() 從 c++ 物件繼承類

--定義乙個名為 baseview 的基礎類

--從 cc.layer 物件派生 baseview 類,該類具有所有 cc.layer 的屬性和方法

local baseview = class("baseview",function()

return cc.layer:create()

end)

function baseview:ctor( ... )

endfunction baseview:initview()

endreturn baseview

物件導向 class

class主要是避免 import導致死迴圈的問題 由於 class僅僅是告訴編譯器後面的名稱是乙個類,所以編譯器並不知道這個類中有哪些屬性和方法,所以在.m中使用這個類時需要import這個類,才能使用 class僅僅是告訴編譯器,class後面的名稱是乙個類,不會做任何的拷貝 具體使用 有乙個p...

lua物件導向

直接貼 參考的也是別人的,只不過其中幾點,增加一點自己的理解 local baseclass print baseclass是 tostring baseclass 定義index屬性,指向本身 baseclass.index baseclass 定義建構函式 function baseclass ...

Lua 物件導向

記錄學習過程 建立日期 2019 04 14 物件由屬性和方法組成。lua中最基本的結構是table,所以需要用table來描述物件的屬性。lua 中的 function 可以用來表示方法。那麼lua中的類可以通過 table function 模擬出來。乙個簡單的物件導向例子 屬性 person ...