LUA(Polymorphism)

g_Data={}

A =
{
    id = 0,
    nNum = 0,

}
-- construct a
function A:New(o)

o = o or {};

o.id = o.id  or 0;
    o.nNum =  o.nNum or 0;

setmetatable(o, self);
 self.__index = self;
    if o.id ~= 0 then
      g_Data[o.id] = o;
    end

return o
end

function A:printA()
    print(" A ------ id:",self.id,"Num:",self.nNum)
end

function A:printB(n)
    return self.nNum +n;
end

function A:printM(n)
    return " A:printM"

end

B= A:New
{
    name ="";
}

-- construct b

function B:New(o)

o =  A:New(o) or {};

o.id = o.id  or 0;
    o.nNum =  o.nNum or 0;
    o.name = o.name or "";

setmetatable(o, self);
 self.__index = self;

return o
end

function B:printA()
   print(" B ------ id:",self.id,"Num:",self.nNum,self.name)
end

function B:printB(n)
  --  print(" BBBB ------ id:",self.id,"Num:",self.nNum)
     local m = A.printB(self,n)
     m = m +1000;
     return m;
end

C = B:New
{

}
-- construct c

function C:New(o)

o =  B:New(o) or {};

setmetatable(o, self);
 self.__index = self;

return o
end

function C:printA()
   print(" C ------ id:",self.id,"Num:",self.nNum,self.name)
end

function C:printB(n)
  --  print(" BBBB ------ id:",self.id,"Num:",self.nNum)
     local m = A.printB(self,n)
     m = m +2000;
     return m;
end

function test()

local a = A:New
{
    id =1,
    nNum = 1,
}
local b = A:New
{
    id =2,
    nNum = 2,
}

a:printA() -- call A:printA()

b:printA() -- still call A:printA()

g_Data[1]:printA()

for i = 10,15 do
    A:New
    {
        id =i,
        nNum = i*i,
    }
end

for i = 16,20 do
    B:New
    {
        id =i,
        nNum = i*i,
        name = "test" .. i;
    }
end
for i = 21,25 do
    C:New
    {
        id =i,
        nNum = i*i,
        name = "test" .. i;
    }
end

print(">>>>>>>>>>>>>>:")
     for index,a in pairs(g_Data) do
         --print("index",index,"a.id", a.id, "a[id]",a["id"])
         a:printA() -- Polymorphism call
     end

print(">>**************************>>>>>>>>>>>>")
     for index,a in pairs(g_Data) do
         print("index ",index," n:", a:printB(10),"A:printB:",A.printB(a,10),a:printM())

a:printA() -- Polymorphism call and qualified call

end

print(">>>>>>>>>>>>>>")
end

test();

时间: 2024-11-15 21:38:11

LUA(Polymorphism)的相关文章

cocos2dx lua中异步加载网络图片,可用于显示微信头像

最近在做一个棋牌项目,脚本语言用的lua,登录需要使用微信登录,用户头像用微信账户的头像,微信接口返回的头像是一个url,那么遇到的一个问题就是如何在lua中异步加载这个头像,先在引擎源码里找了下可能会提供这个功能的地方,发现好像没有提供类似功能,那么只能自己动手写.所以我在ImageView这个类里面添加了一个成员方法,其实可以不写在ImageView里,而且我觉得非必需情况下还是不要修改引擎源码的好,因为如果源码改动比较多的话,将来引擎版本升级会比较麻烦.我写在ImageView里纯粹是想偷

Lua 第一天

今天开始学习Lua语言,感觉Lua非常便捷.我用的编译器是SciTE,很不错. 举例一:无需引用,内置输出语句   print() print(6)   --> 6 print(type(6))  -->   number 举例二:对数字字符串进行数字化处理 print("2"+3 )  -->5 举例三:..连接俩个字符串,#返回字符串长度 举例四:print()输出函数,可以有多个输出值 a = 1,b =2,c = a+b    print(a,b,c,a,b,

lua协程一则报错解决“attempt to yield across metamethod/C-call boundary”

问题 attempt to yield across metamethod/C-call boundary 需求跟如下帖子中描述一致: http://bbs.chinaunix.net/forum.php?mod=viewthread&action=printable&tid=4065715 模拟一个场景,在C中创建出coroutine来执行Lua脚本,并且提供C API给Lua使用,当某些操作可能会阻塞时(如网络I/O),C函数中执行yield将协程切换出去,然后未来的某个时刻,如果条件

lua闭合函数

function count( ... ) local i = 0 return function( ... ) i = i+ 1 return i end end local func = count(...) print(func()) print(func()) print(func()) 结果如下: 1 2 3 [Finished in 0.1s] lua 闭合函数:一个函数加上该函数所需访问的所有“非局部变量”. 如上所示:count()函数返回了另一个函数,而这个函数使用了count

Mac下Lua Sublime Text2 开发环境搭建

1.安装Lua编译器 下载Lua, http://www.lua.org/: 解压后,cd进入该文件夹src目录下 在当前文件夹执行make macosx   然后回车 cd 到上一目录,执行sudo make install 完成之后执行lua -v 可以看到:Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio 2.安装Sublime Text2 1.下载http://sublime-text-2.cn.uptodown.com后打开: {

Nginx+Lua 积累

Nginx+Lua 积累 1.解析16进制编码的中文参数 复制代码 local encodeStr = "%E6%B0%94" local decodeStr = ""; for i = 2, #encodeStr - 1, 3 do local num = encodeStr:sub(i, i + 1); num = tonumber(num, 16); decodeStr = decodeStr .. string.char(num); end ngx.say(

nginx与Lua执行顺序

Nginx顺序 Nginx 处理每一个用户请求时,都是按照若干个不同阶段(phase)依次处理的,而不是根据配置文件上的顺序. Nginx 处理请求的过程一共划分为 11 个阶段,按照执行顺序依次是 post-read.server-rewrite.find-config.rewrite.post-rewrite. preaccess.access.post-access.try-files.content.log. post-read: 读取请求内容阶段 Nginx读取并解析完请求头之后就立即

在 Lua 里 使用 Cocos Studio 导出的 .csb 文件

1. 加载 节点到场景 第一种方法 local scene = cc.CSLoader:createNode("scene.csb") self:addChild(scene) 第二种方法 local scene = cc.uiloader:load("MainScene.csb"):addTo(self) 2.强转精灵类型 local sprite = tolua.cast(object,"cc.Sprite") CocoStudio 做的里面

深入lua栈交互—cpp调用lua数据

lua是通过lua_state这个栈来和c 交互的 1.....lua栈 index 下往上增长 如: 1 2 3 4 5 6 2.....lua栈 index 是循环的 如下 index 上到下 是 3 2 1 0 -1 -2 -3 ,栈对应的值为     1     2     3     x     1     2     3      3......lua函数多个返回值如果上面是function返回了3个返回值,那么return a ,b,c  中 a=3 b=2 c=1 第一个返回值先