zoukankan      html  css  js  c++  java
  • lua 类的继承

    local _class={}
    
    function class(super)
    	local class_type={}
    	class_type.ctor=false
    	class_type.super=super
    	class_type.new=function(...)
    			local obj={}
    			do
    				local create
    				create = function(c,...)
    					if c.super then
    						create(c.super,...)
    					end
    					if c.ctor then
    						c.ctor(obj,...)
    					end
    				end
    
    				create(class_type,...)
    			end
    			setmetatable(obj,{ __index=_class[class_type] })
    			return obj
    		end
    	local vtbl={}
    	_class[class_type]=vtbl
    
    	setmetatable(class_type,{__newindex=
    		function(t,k,v)
    			vtbl[k]=v
    		end
    	})
    
    	if super then
    		setmetatable(vtbl,{__index=
    			function(t,k)
    				local ret=_class[super][k]
    				vtbl[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:print_x()	-- 定义一个成员函数 base_type:print_x
    	print(self.x)
    end
    
    function base_type:hello()	-- 定义另一个成员函数 base_type:hello
    	print("hello base_type")
    end
    
    test=class(base_type)	-- 定义一个类 test 继承于 base_type
    
    function test:ctor()	-- 定义 test 的构造函数
    	print("test ctor")
    end
    
    function test:hello()	-- 重载 base_type:hello 为 test:hello
    	print("hello test")
    end
    
    a=test.new(1)	-- 输出两行,base_type ctor 和 test ctor 。这个对象被正确的构造了。
    a:print_x()	-- 输出 1 ,这个是基类 base_type 中的成员函数。
    a:hello()	-- 输出 hello test ,这个函数被重载了。
    
    

    原文地址:

    http://blog.codingnow.com/cloud/LuaOO

  • 相关阅读:
    docker学习及应用
    openstack入门及应用
    C# 值类型,引用类型区别
    C# 继承
    Unity 使用Plugins接入安卓SDK 基础篇
    详谈 Unity3D AssetBundle 资源加载,结合实际项目开发实例
    Unity3D 协程 浅谈
    《俄罗斯,有点意思》
    老男孩之《生日快乐》
    【诗歌系列】《神曲》
  • 原文地址:https://www.cnblogs.com/byfei/p/3112350.html
Copyright © 2011-2022 走看看