勤奋努力,持之以恒!
表:
Lua中的数据结构,可以存放各种域。
由于Lua中的函数也是第一类值,于是表可以存放属性域和方法域,因此表可以描述一个类。
元表:
元表也是一个表,可以设置给一个本表。
一个表作为元表概念存在的意义在于它可以通过定义自身的一系列元方法来改变本表的行为。
如果一个元表不被设置给一个本表,那么他是没有意义的,一个本表的元表可以是自身。
元方法:
Lua给表预备了一些特殊的行为,这些行为可以通过元方法来定义。
--表,元表,元方法的功能组合起来,可以让lua代码实现面向对象的机制。
------------------------- 通过 表table 元表metatable 元方法metamethod 封装一个类------------------------------
Base = {} --Base是原型表.一个原型表用来描述一个类,在原型表中填写类方法,类属性则声明在构造函数内的新表中。
--实例化对象时,创建一个新表,将新表的元表设置为原型表。
--self表示自身,lua本身没有面向对象概念,实现面向对象使用的是table类型,当函数内操作self时相当于使用对象本身。
function Base.new(self)
--创建一个新表o,类中的成员最好声明在构造函数内的新表中,而方法可以声明在原型表中。
local o = {x = 0, y = 0, t = {h = 0}}
--将新表o的元表设置为原型表。
setmetatable(o,self)
--[[__index元方法:当访问到表中不存在的域时,将调用其元表的__index元方法(如果该表指定了元表并且元表定义了__index元方法的话)。
如果其元表的__index方法返回一个表中含有该域,则访问该域。]]--
self.__index = self --原型表的__index为原型表。
return o
end
function Base.setXY(self, x, y)--元方法
self.x = x
self.y = y
end
----------------------------------------------------------------------------------------------------------
------------------------------------------ 创建一个新类Deriver,使它继承Base类---------------------------------
--派生一个类只需要一个原型表的新实例
Deriver = Base:new()
--Deriver表现在看起来是一个Base原型表的新实例,它的元表是Base,重写Deriver的new方法,在new方法中扩充Deriver的新属性。
function Deriver.new(self)
local o = getmetatable(self).new(self)
o.z = 0 --添加一新属性
return o
end
-----------------------------------------------------------------------------------------------------------
local function myInit()
--封装的类实例化
local b1 = Base:new()
--b1:setXY(200,300)
b1.x = 200
b1.y = 300
b1.t.h = 100
cclog("b1X = %d, b1Y = %d, b1T = %d",b1.x,b1.y,b1.t.h)
--[LUA-print] b1X = 200, b1Y = 300, b1T = 100
local b2 = Base:new()
b2:setXY(300,400)
b2.t.h = 99
cclog("b2X = %d, b2Y = %d, b2T = %d",b2.x,b2.y,b2.t.h)
--[LUA-print] b2X = 300, b2Y = 400, b2T = 99
--继承类实例化
local d = Deriver:new()
d:setXY(500,600)
d.z = 101
d.t.h = 102
cclog("dX = %d, dY = %d, dT = %d, dZ = %d",d.x,d.y,d.t.h,d.z)
--[LUA-print] dX = 500, dY = 600, dT = 102, dZ = 101
end
分享到:
相关推荐
对lua面向对象简单封装-原文地址:https://blog.csdn.net/wuliping118/article/details/81435814
Lua面向对象封装好的基类Class
Lua的面向对象封装 LuaOO是Lua C API使用C++语言的面向对象封装。LuaOO是在lua原有的API基础之上扩展而来,极少地修改lua源码,主要是通过扩展lua原来的代码。扩展lua与C++环境交互。因此当有新版本的lua源码发布时...
lua面向对象编程类库笔记(源码中)
Lua实现OOP,可以继承,覆盖,sample里面实现了简单的lua类定义,并封装了简单的事件驱动机制
LUA 面向对象设计LUA 面向对象设计LUA 面向对象设计
Lua 面向对象 文档面向对象编程是一种非常流行的计算机编程架构
Lua支持面向对象代码,包括类和接口的支持
Lua面向对象代码实例,绝对完整可用,有问题可留言,欢迎下载!O(∩_∩)O哈哈!!!~~~~~~~
Lua 面向对象 面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构。 以下几种编程语言都支持面向对象编程: C++ Java Objective-C Smalltalk C# Ruby 面向对象特征 1) 封装:指...
在lua中实现类,以及继承的方法,包括了一些例子
用lua面向对象编程,如何在lua中写c++中的类
Lua中没有类的概念,但是程序猿说要面向对象,然后就有类。程序猿说要继承 和override,然后就有了继承 和 override 。
主要介绍了Lua面向对象编程之类的简单实现方式,本文直接给出一个类的编码实例,并详细讲解了调用方式,需要的朋友可以参考下
1、创建一个简单的类 2、创建一个对象 3、访问属性 4、访问成员函数 5、完整实例
主要介绍了Lua教程(十二):面向对象编程,本文讲解了类、继承、私密性等面向对象编程知识,需要的朋友可以参考下
LUA程序设计教程LUA程序设计教程LUA程序设计教程LUA程序设计教程LUA程序设计教程LUA程序设计教程LUA程序设计教程LUA程序设计教程LUA程序设计教程LUA程序设计教程LUA程序设计教程LUA程序设计教程LUA程序设计教程
8_lua基础篇_面向对象编程
Lua中没有类的概念,但是程序猿说要面向对象,然后就有类。程序猿说要继承 和override,然后就有了继承 和 override 。
实现LUA中调用C++类,并对其封装, LINUX下编译