function class(super)
local class_type = {}
class_type.ctor = false
class_type.super = super
class_type.delete = function(t)
t.__safe_shield = nil
do
local del
del = function(c)
local dtor = rawget(c, 'dtor')
if dtor then
dtor(t)
end
if c.super then
del(c.super)
end
end
del(class_type)
end
end
class_type.new = function(...)
local obj = setmetatable({}, { __index = class_type })
obj.__safe_shield=true
do
local create
create = function(c, ...)
if c.super then
create(c.super, ...)
end
local ctor = rawget(c, 'ctor')
if ctor then
ctor(obj, ...)
end
end
create(class_type, ...)
end
return obj
end
if super then
setmetatable(class_type, { __index = function(t,k)
local ret = class_type.super[k]
class_type[k] = ret
return ret
end
})
end
return class_type
end
base_type=class() -- 定义一个基类 base_type
function base_type:ctor(x) -- 定义 base_type 的构造函数
print("base_type ctor")
self.x=x
end
function base_type:dtor()
print("base_type dtor")
end
function base_type:print_x() -- 定义一个成员函数 base_type:print_x
print(self.x)
end
function base_type:hello() -- 定义另一个成员函数 base_type:hello
print("hello base_type")
self:print_x()
end
test=class(base_type) -- 定义一个类 test 继承于 base_type
function test:ctor() -- 定义 test 的构造函数
print("test ctor")
end
function test:dtor()
print("test dtor")
end
function test:print_x()
print("test print_x")
end
-- function test:hello() -- 重载 base_type:hello 为 test:hello
-- print("hello test")
-- end
a=test.new(1) -- 输出两行,base_type ctor 和 test ctor 。这个对象被正确的构造了。
a:hello() -- 输出 1 ,这个是基类 base_type 中的成员函数。
a:delete()
纯lua脚本实现c++中的类的概念机制,后面空了把lua和c++的交互,lua中直接声明和使用c++中定义的对象补充到这个系列上
网友评论