国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

無涯教程-Lua - 面向?qū)ο?/h1>

這篇具有很好參考價值的文章主要介紹了無涯教程-Lua - 面向?qū)ο?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

面向?qū)ο缶幊?OOP)是現(xiàn)代編程時代中使用最廣泛的編程技術之一。

OOP的特征

  • 類(Class)? ? ? ? ? ? ? ? ? ? ? ?- 類是用于創(chuàng)建對象的可擴展模板。

  • 對象(Objects)? ? ? ? ? ? ? ?- 它是類的實例,并為其分配了單獨的內(nèi)存空間。

  • 繼承(Inheritance)? ? ? ?- 這是一個概念,一個類的變量和函數(shù)被另一類繼承。

  • 封裝(Encapsulation)? - 這是將數(shù)據(jù)和函數(shù)合并到一個類中的過程。

您可以借助Table和Lua的一流函數(shù)在Lua中實現(xiàn)面向?qū)ο?。通過將函數(shù)和相關數(shù)據(jù)放入表中,可以形成一個對象。繼承可以在Meta的幫助下實現(xiàn),它為父對象中不存在的函數(shù)(方法)和字段提供了一種查找機制。

Lua中的Table具有獨立其值的對象特征。具有相同值的兩個對象是不同的對象,而一個對象在不同時間可以具有不同的值,但是它始終是同一對象。

讓無涯教程考慮一個簡單的數(shù)學示例。經(jīng)常遇到需要處理不同形狀(如圓形,矩形和正方形)的情況。

形狀可以具有公共屬性Area。因此,可以從具有公共屬性區(qū)域的基礎對象形狀擴展其他形狀。每個形狀都可以具有自己的屬性和函數(shù),如矩形可以具有屬性長度,寬度,面積作為其屬性,以及printArea和calculateArea作為其函數(shù)。

創(chuàng)建類

下面顯示了具有三個屬性區(qū)域,長度和寬度的矩形的簡單類實現(xiàn)。它還具有printArea函數(shù)以打印計算出的區(qū)域。

-- 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

創(chuàng)建對象

創(chuàng)建對象是為類分配內(nèi)存的過程。每個對象都有其自己的內(nèi)存并共享公共類數(shù)據(jù)。

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

訪問屬性

無涯教程可以使用點運算符訪問類中的屬性,如下所示:

print(r.length)

訪問函數(shù)

您可以使用帶有該對象的冒號運算符訪問成員函數(shù),如下所示-

r:printArea()

分配內(nèi)存并設置初始值??梢詫⒊跏蓟^程與其他面向?qū)ο笳Z言的構造函數(shù)進行比較。

完整的示例

來看一個在Lua中使用面向?qū)ο蟮耐暾纠?/p>

-- 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 繼承

繼承是將簡單的基礎對象(如形狀)擴展為矩形,正方形等的過程。它在現(xiàn)實世界中經(jīng)常用于共享和擴展基本屬性和函數(shù)。

來看一個簡單的類擴展。有一個如下所示的類。

-- 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 覆蓋

可以覆蓋基類函數(shù),而不是使用基類中的函數(shù),派生類可以有自己的實現(xiàn),如下所示:

-- Derived class method printArea

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

Lua 繼承示例

無涯教程可以借助另一個新方法,借助元表,來擴展Lua中的簡單類實現(xiàn),如上所示?;惖乃谐蓡T變量和函數(shù)都保留在子類中。

-- 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創(chuàng)建了兩個派生類-Rectangle和Square??梢栽谂缮愔兄貙懟惖暮瘮?shù)。在此示例中,派生類覆蓋函數(shù)printArea。

Lua - 面向?qū)ο?- 無涯教程網(wǎng)無涯教程網(wǎng)提供面向?qū)ο缶幊?OOP)是現(xiàn)代編程時代中使用最廣泛的編程技術之一。 OOP的特征 類(Class)?...https://www.learnfk.com/lua/lua-object-oriented.html文章來源地址http://www.zghlxwxcb.cn/news/detail-629410.html

到了這里,關于無涯教程-Lua - 面向?qū)ο蟮奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包