无涯教程-Lua - 面向对象

这篇具有很好参考价值的文章主要介绍了无涯教程-Lua - 面向对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

面向对象编程(OOP)是现代编程时代中使用最广泛的编程技术之一。

OOP的特征

  • 类(Class)                       - 类是用于创建对象的可扩展模板。

  • 对象(Objects)               - 它是类的实例,并为其分配了单独的内存空间。

  • 继承(Inheritance)       - 这是一个概念,一个类的变量和函数被另一类继承。

  • 封装(Encapsulation)  - 这是将数据和函数合并到一个类中的过程。

您可以借助Table和Lua的一流函数在Lua中实现面向对象。通过将函数和相关数据放入表中,可以形成一个对象。继承可以在Meta的帮助下实现,它为父对象中不存在的函数(方法)和字段提供了一种查找机制。

Lua中的Table具有独立其值的对象特征。具有相同值的两个对象是不同的对象,而一个对象在不同时间可以具有不同的值,但是它始终是同一对象。

让无涯教程考虑一个简单的数学示例。经常遇到需要处理不同形状(如圆形,矩形和正方形)的情况。

形状可以具有公共属性Area。因此,可以从具有公共属性区域的基础对象形状扩展其他形状。每个形状都可以具有自己的属性和函数,如矩形可以具有属性长度,宽度,面积作为其属性,以及printArea和calculateArea作为其函数。

创建类

下面显示了具有三个属性区域,长度和宽度的矩形的简单类实现。它还具有printArea函数以打印计算出的区域。

-- Meta class
Rectangle = {area = 0, length = 0, breadth = 0}

-- Derived class method new

function Rectangle:new (o,length,breadth)
   o = o or {}
   setmetatable(o, self)
   self.__index = self
   self.length = length or 0
   self.breadth = breadth or 0
   self.area = length*breadth;
   return o
end

-- Derived class method printArea

function Rectangle:printArea ()
   print("The area of Rectangle is ",self.area)
end

创建对象

创建对象是为类分配内存的过程。每个对象都有其自己的内存并共享公共类数据。

r=Rectangle:new(nil,10,20)

访问属性

无涯教程可以使用点运算符访问类中的属性,如下所示:

print(r.length)

访问函数

您可以使用带有该对象的冒号运算符访问成员函数,如下所示-

r:printArea()

分配内存并设置初始值。可以将初始化过程与其他面向对象语言的构造函数进行比较。

完整的示例

来看一个在Lua中使用面向对象的完整示例。

-- Meta class
Shape = {area = 0}

-- Base class method new

function Shape:new (o,side)
   o = o or {}
   setmetatable(o, self)
   self.__index = self
   side = side or 0
   self.area = side*side;
   return o
end

-- Base class method printArea

function Shape:printArea ()
   print("The area is ",self.area)
end

-- Creating an object
myshape = Shape:new(nil,10)

myshape:printArea()

当您运行上述程序时,您将获得以下输出。

The area is 	100

Lua 继承

继承是将简单的基础对象(如形状)扩展为矩形,正方形等的过程。它在现实世界中经常用于共享和扩展基本属性和函数。

来看一个简单的类扩展。有一个如下所示的类。

-- Meta class
Shape = {area = 0}

-- Base class method new

function Shape:new (o,side)
   o = o or {}
   setmetatable(o, self)
   self.__index = self
   side = side or 0
   self.area = side*side;
   return o
end

-- Base class method printArea

function Shape:printArea ()
   print("The area is ",self.area)
end

可以将形状扩展到方形,如下所示。

Square = Shape:new()

-- Derived class method new

function Square:new (o,side)
   o = o or Shape:new(o,side)
   setmetatable(o, self)
   self.__index = self
   return o
end

Lua 覆盖

可以覆盖基类函数,而不是使用基类中的函数,派生类可以有自己的实现,如下所示:

-- Derived class method printArea

function Square:printArea ()
   print("The area of square is ",self.area)
end

Lua 继承示例

无涯教程可以借助另一个新方法,借助元表,来扩展Lua中的简单类实现,如上所示。基类的所有成员变量和函数都保留在子类中。

-- Meta class
Shape = {area = 0}

-- Base class method new

function Shape:new (o,side)
   o = o or {}
   setmetatable(o, self)
   self.__index = self
   side = side or 0
   self.area = side*side;
   return o
end

-- Base class method printArea

function Shape:printArea ()
   print("The area is ",self.area)
end

-- Creating an object
myshape = Shape:new(nil,10)
myshape:printArea()

Square = Shape:new()

-- Derived class method new

function Square:new (o,side)
   o = o or Shape:new(o,side)
   setmetatable(o, self)
   self.__index = self
   return o
end

-- Derived class method printArea

function Square:printArea ()
   print("The area of square is ",self.area)
end

-- Creating an object
mysquare = Square:new(nil,10)
mysquare:printArea()

Rectangle = Shape:new()

-- Derived class method new

function Rectangle:new (o,length,breadth)
   o = o or Shape:new(o)
   setmetatable(o, self)
   self.__index = self
   self.area = length * breadth
   return o
end

-- Derived class method printArea

function Rectangle:printArea ()
    print("The area of Rectangle is ",self.area)
end

-- Creating an object

myrectangle = Rectangle:new(nil,10,20)
myrectangle:printArea()

当运行上面的程序时,将获得以下输出-

The area is 	100
The area of square is 	100
The area of Rectangle is 	200

在上面的示例中,从基类Square创建了两个派生类-Rectangle和Square。可以在派生类中重写基类的函数。在此示例中,派生类覆盖函数printArea。

Lua - 面向对象 - 无涯教程网无涯教程网提供面向对象编程(OOP)是现代编程时代中使用最广泛的编程技术之一。 OOP的特征 类(Class) ...https://www.learnfk.com/lua/lua-object-oriented.html文章来源地址https://www.toymoban.com/news/detail-629410.html

到了这里,关于无涯教程-Lua - 面向对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 无涯教程-Lua - Arrays(数组)

    数组是对象的有序排列,可以是包含行集合的一维数组,也可以是包含多行和多列的多维数组。 在Lua中,数组是使用带有整数的索引表实现的。数组的大小不是固定的,并且可以根据无涯教程的要求(取决于内存限制)来增长。 一维数组可以使用简单的表结构表示,并且可以使

    2024年02月14日
    浏览(37)
  • 无涯教程-Lua - Modules(模块)

    模块就像可以使用 require 加载的库,并且具有包含 Table 的单个全局名称,该模块可以包含许多函数和变量。 其中一些模块示例如下。 让无涯教程考虑一个简单的示例,其中一个函数具有数学函数。将此模块称为mymath,文件名为mymath.lua。文件内容如下- 现在,为了在另一个文

    2024年02月14日
    浏览(43)
  • Lua 面向对象

    Lua 中一张表 table 就是一个对象( 注意不是类,是对象 )。他具有以下的特性: 表和对象都可以拥有状态 表和对象都拥有一个与其值无关的标识(self) 两个具有相同值的对象是两个不同的对象,而一个对象可以具有多个不同的值 表和对象一样,具有与创建者和被创建者位

    2024年02月09日
    浏览(35)
  • lua 实现面向对象

    function class(super, classname)     local superType = type(super)     local cls     if superType ~= \\\"function\\\" and superType ~= \\\"table\\\" then         superType = nil         super = nil     end     if superType == \\\"function\\\" or (super and super.__ctype == 1) then         -- inherited from native C++ Object         cls = {}        

    2024年02月11日
    浏览(41)
  • 无涯教程-Lua - while语句函数

    只要给定条件为真,Lua编程语言中的 while 循环语句就会重复执行目标语句。 Lua编程语言中 while 循环的语法如下- 在这里,需要注意的关键是 while 循环可能根本不执行。当测试条件并且输出为false时,将跳过循环主体,并执行 while 循环之后的第一条语句。 构建并执行上述代码

    2024年02月14日
    浏览(43)
  • 无涯教程-Lua - for语句函数

    for 循环是一种重复控制结构,可让您有效地编写需要执行特定次数的循环。 Lua编程语言中 for 循环的语法如下- 这是 for 循环中的控制流程- 首先执行 init 步骤,并且仅执行一次。此步骤使您可以声明和初始化任何循环控制变量。 接下来是max/min。这是循环继续执行之前的最大

    2024年02月14日
    浏览(40)
  • 无涯教程-Lua - Iterators(迭代器)

    迭代器是一种构造,使您可以遍历所谓的集合或集合的元素。在Lua中,这些集合通常引用表,这些表用于创建各种数据结构(如数组)。 通用的 for 迭代器提供集合中每个元素的键值对。下面给出一个简单的示例。 当无涯教程运行上面的代码时,将获得以下输出- 上面的示例使

    2024年02月14日
    浏览(39)
  • 无涯教程-Lua - nested语句函数

    Lua编程语言允许在另一个循环中使用一个循环。以下部分显示了一些示例来说明这一概念。 Lua中嵌套for循环语句的语法如下- Lua编程语言中的嵌套while循环语句的语法如下- Lua编程语言中的嵌套重复...直到循环语句的语法如下- 关于循环嵌套的最后一点是,您可以将任何类型的

    2024年02月14日
    浏览(39)
  • 无涯教程-Lua - 文件I/O

    I/O库用于在Lua中读取和处理文件。 Lua中有两种文件操作,即隐式( Implicit )和显式( Explicit )操作。 对于以下示例,无涯教程将使用例文件test.lua,如下所示。 一个简单的文件打开操作使用以下语句。 下表列出了各种文件模式。 Sr.No. Mode Remark 1 \\\" r\\\" 只读模式,是打开现有文件的

    2024年02月14日
    浏览(34)
  • 无涯教程-Lua - 嵌套if语句函数

    在Lua编程中,您可以在另一个 if or else if 语句中使用一个 if or else if 语句。 嵌套if 语句的语法如下- 您可以像嵌套 if 语句一样,嵌套 else if ... else 。 当您构建并运行以上代码时,它将产生以下输出。 Lua 中的 嵌套if语句函数 - 无涯教程网 无涯教程网提供在Lua编程中,您可以

    2024年02月14日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包