Lua面向对象编程和c++面向对象编程,都是面向对象方法学,都支持类,继承,多态。
什么是类?在c++中,类其实是一个模板,实例化一个类后产生这个类的一个对象,然后才能像:对象.方法(),对象.属性,或者,类指针->方法()。可是在Lua中,类和这个类的对象之间的概念很模糊,lua语言构造的类,可以不经过实例化过程,直接当对象使用。这因为这样,lua中的对象是一种模拟。我们抽象理解为需要实例化过程,也许我讲的不是很清楚,我们看下代码:
--
账户基类:Account
Account
=
{balance
=
100.00
}
--
有一个blance属性
--
-模拟Account实例化和继承思想所需的方法new()
function
Account:new(o) o
=
o
or
{ }
setmetatable
(o,self) self.__index
=
self
return
o
end
--
Account类的方法deposit(存款)
function
Account:deposit( v ) self.balance
=
self.balance
+
v
end
--
Account类的方法deposit(取款)
function
Account:withdraw( v )
if
v
>
self.balance
then
error
"
no enph money!
"
end
self.balance
=
self.balance
-
v
end
--
--------------------------------------------------------------------------------------
--
派生子类
spacialAccount
=
Account:new{limit
=
1000.00
,rate
=
0.100
}
--
子类的新方法
function
spacialAccount:setrate( v ) self.rate
=
v;
end
--
实例化子类,得到对象s
s
=
spacialAccount:new()
--
对象调用方法
s:setrate(
0.300
)
print
(s.balance)
print
(s.limit)
print
(s.rate)
子类继承父类,和实例化类产生新对象都用new()方法模拟实现,实现形式一样,但概念是不一样的,关系很微妙,很奇葩。