【建站服务】河北省雄安新区网站建设公司-雄安新区专业网页设计公司-雄安新区高端网站制作-雄安新区品牌网站设计-雄安新区页面美工-雄安新区上档次网站建设-雄安新区定制个性化网站开发-雄安新区一站式一条龙
作者: 风兰 . 阅读量: 4 . 发表时间:2022-09-20 19:24:08
上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。
河北省雄安新区网站建设公司-雄安新区专业网页设计公司-雄安新区高端网站制作-雄安新区品牌网站设计-雄安新区页面美工-雄安新区上档次网站建设-雄安新区定制个性化网站开发-雄安新区一站式一条龙网站搭建开发-雄安新区一站式一条龙网站搭建

雄安新区设立以来,加大对白洋淀的生态保护力度,淀内鱼、虾、蟹、贝、莲、藕等水生动植物资源丰富,野生鸟类不断增加。三年多来,新记录到白眼潜鸭、乌雕、白腹鹞、黄脚三趾鹑、毛腿沙鸡、红嘴蓝鹊等。截至2021年1月,白洋淀野生鸟类种类记录合计达215种,主要有天鹅、大鸨、苇莺、黑水鸡、鸪丁、苍鹭、斑嘴鸭等,其中国家一级重点保护鸟类4种,国家二级重点保护鸟类27种。
河北省雄安新区网站建设公司-雄安新区专业网页设计公司-雄安新区高端网站制作-雄安新区品牌网站设计-雄安新区页面美工-雄安新区上档次网站建设-雄安新区定制个性化网站开发-雄安新区一站式一条龙网站搭建开发-雄安新区一站式一条龙网站搭建
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)
关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站



按实例的写法,每次new新实例的时候都需要将第一个变量的值设为nil,很不方便。
可以稍做变形,把变量o放在函数里创建,免去麻烦。
--创建一个类,表示四边形local RectAngle = { length, width, area} --声明类名和类成员变量 function RectAngle: new (len,wid) --声明新建实例的New方法 local o = { --设定各个项的值 length = len or 0, width = wid or 0, area =len*wid } setmetatable(o,{__index = self} )--将自身的表映射到新new出来的表中 return o end function RectAngle:getInfo()--获取表内信息的方法 return self.length,self.width,self.area enda = RectAngle:new(10,20)print(a:getInfo()) -- 输出:10 20 200b = RectAngle:new(10,10)print(b:getInfo()) -- 输出:10 10 100print(a:getInfo()) -- 输出:10 20 200达也酱
jja***@163.com
gray.yang
gra***ang@fibocom.com
补充: . 与 : 的区别在于使用 : 定义的函数隐含 self 参数,使用 : 调用函数会自动传入 table 至 self 参数,示例:
classA={}function classA:getob(name) print(self) ob={} setmetatable(ob,self) self.__index=self self.name=name return obendfunction classA:getself() return selfendc1=classA:getob("A")c2=classA:getob("B")print(string.rep("*",30))print(c1:getself())print(c2:getself())print(string.rep("*",30))----------------------继承------------------------classB=classA:getob() ----非常重要,用于获取继承的selffunction classB:getob(name,address) ob=classA:getob(name) setmetatable(ob,self) self.__index=self self.address=address return obendc3=classB:getob("gray.yang","shenzhen")print(c3:getself())输出结果:
gray.yang
gra***ang@fibocom.com
miaosu5cm
mia***5cm@163.com
模拟类和继承
classA={}function classA.new(cls,...) --定义类方法时使用"."号,不适用隐式传参 this={} setmetatable(this,cls) cls.__index=cls --将元表的__index设为自身,访问表的属性不存在时会搜索元表 cls.init(this,...) --初始化表,注意访问类的方法都是".",此时不会隐式传入参数 return thisendfunction classA.init(self,name) self.name=nameendfunction classA.getname(self) return self.nameendp=classA:new("gray.yang")print(p:getname())print(string.rep("*",50))模拟继承
classB=classA:new() --获得实例function classB.new(cls,...) this={} setmetatable(this,cls) cls.__index=cls cls.init(this,...) return thisendfunction classB.init(self,name,address) super=getmetatable(self) super:init(name) --使用父类初始化 self.address=addressendfunction classB.getaddress(self) return self.addressendb=classB:new("tom.li","shenzhen")print("getbname==============>",b:getname())print("getbaddress===========>",b:getaddress())miaosu5cm
mia***5cm@163.com
Ives
571***385@qq.com
多重继承
-- 在table 'plist'中查找'k'local function search(k, plist) for i = 1, #plist do local v = plist[i][k] -- 尝试第i个基类 if v then return v end endendfunction createClass(...) local c = {} -- 新类 local parents = {...} -- 类在其父类列表中的搜索方法 setmetatable(c, {__index = function(t, k) return search(k, parents) end}) -- 将'c'作为其实例的元表 c.__index = c -- 为这个新类定义一个新的构造函数 function c:new(o) o = o or {} setmetatable(o, c) return o end return c -- 返回新类end-- 类NamedNamed = {}function Named:getname() return self.nameendfunction Named:setname(n) self.name = nend-- 类AccountAccount = {balance = 0}function Account:withdraw(w) self.balance = self.balance - vend-- 创建一个新类NamedAccount,同时从Account和Named派生NamedAccount = createClass(Account, Named)account = NamedAccount:new()account:setname("Ives")print(account:getname()) -- 输出 IvesIves
571***385@qq.com
大轩
tol***uan@163.com
参考地址
一个简单的面向对象实现
--[[Lua 中使用":"实现面向对象方式的调用。":"只是语法糖,它同时在方法的声明与实现中增加了一个名为 self 的隐藏参数,这个参数就是对象本身。]]--实例:Account = {balance = 0};--生成对象function Account:new(o) o = o or {}; --如果用户没有提供对象,则创建一个。 setmetatable(o, self); --将 Account 作为新创建的对象元表 self.__index = self; --将新对象元表的 __index 指向为 Account(这样新对象就可以通过索引来访问 Account 的值了) return o; --将新对象返回end--存款function Account:deposit(v) self.balance = self.balance + v;end--取款function Account:withdraw(v) self.balance = self.balance - v;end--查询function Account:demand() print(self.balance);end--创建对象myAccount = Account:new();--通过索引访问print(myAccount.balance);--调用函数myAccount:deposit(100);myAccount:withdraw(50);myAccount:demand();执行结果:
大轩
tol***uan@163.com
参考地址
wildwolf
wil***lf12@qq.com
其中 A 为抽象类,B 为矩形类,C 为立方体类。
C 继承 B,B 继承 A。
类对象各自独立,不影响类默认成员属性值。
B = {length, width, area}function B:new(len,wid) local A = {length=0,width=0} local o = {} setmetatable(o,A) B.__index=A o.length=len or A.length o.width=wid or A.width o.area=o.length*o.width return oenda=B:new(2,3)b=B:new(3,4)print("长方形a的面积为"..a.area)print("长方形b的面积为"..b.area)print("长方形a的面积仍然为"..a.area..", a与b独立存在")c=B:new()print("长方形c根据默认构造函数的面积为"..c.area..", c的长宽分别为",c.length,c.width)--立方体C,继承长方形类B C = {high=0, volume=0, rectangle=B.new()} --增加体积值和高度C.__index=C function C:new(len, wid, hig) local o={} setmetatable(o,C) --将原始类C作为它对象的原表 o.rectangle=B:new(len,wid) o.high=hig or C.high o.volume=o.high*o.rectangle.area return oendcubeA=C:new(2,3,4)cubeB=C:new(3,4,5)print("立方体A的体积为"..cubeA.volume)print("立方体B的体积为"..cubeB.volume)print("立方体A的体积仍然为"..cubeA.volume..", A与B独立存在")print("立方体A底面长方体的长与宽分别为" ,cubeA.rectangle.length ,cubeA.rectangle.width)print("立方体B底面长方体的长与宽分别为" ,cubeB.rectangle.length ,cubeB.rectangle.width)print("cubeA和cubeB的底边长方形同样独立存在")