Lua面向对象利用metamethod重载运算符
2019独角兽企业重金招聘Python工程师标准>>>
##利用Point作为例子
local math = require("math")
local Point = {x = 0, y = 0}
Point.__index = Point
function Point.new(x, y)local self = setmetatable({}, Point)if (type(x) == "table") thenfor k, v in pairs(x) doself[k] = vendelseif (type(x) == "number" and type(y) == "number") thenself['x'] = xself['y'] = yendreturn self
end-- 两点相加
function Point.__add(p1, p2)local p3 = Point.new({x = p1.x + p2.x, y = p1.y + p2.y})return p3
end-- 两点相减
function Point.__sub(p1, p2)return Point.new({x = p1.x - p2.x, y = p1.y - p2.y})
end-- 两点相乘
function Point.__mul(p1, p2)return Point.new({x = p1.x * p2.x, y = p1.y * p2.y})
end-- 两点相除
function Point.__div(p1, p2)return Point.new({x = p1.x / p2.x, y = p1.y / p2.y})
end-- 相等
function Point.__eq(p1, p2)return p1.x == p2.x and p1.y == p2.y
end-- 两点距离
function Point:distance(p2)return math.sqrt(math.pow(self.x - p2.x, 2) + math.pow(self.y - p2.y, 2))
endfunction Point.__tostring(p1)return "x="..p1.x.." y="..p1.y
endlocal p1 = Point.new()
print(p1)local p2 = Point.new(1, 2)
print(p2)local p3 = Point.new(p2)
print(p3)local p4 = p2 + p3
print(p4)local p5 = p4 - p2
print(p5)local p6 = p4 * p5
print(p6)local p7 = p6 / p4
print(p7)print(p7 == p6)print(p7:distance(p6))
print(p7)
输出
x=0 y=0
x=1 y=2
x=1 y=2
x=2 y=4
x=1 y=2
x=2 y=8
x=1 y=2
false
6.0827625302982
x=1 y=2
转载于:https://my.oschina.net/skyhacker2/blog/324107
Lua面向对象利用metamethod重载运算符相关推荐
- 笔记②:牛客校招冲刺集训营---C++工程师(面向对象(友元、运算符重载、继承、多态) -- 内存管理 -- 名称空间、模板(类模板/函数模板) -- STL)
0618 C++工程师 第5章 高频考点与真题精讲 5.1 指针 & 5.2 函数 5.3 面向对象(和5.4.5.5共三次直播课) 5.3.1 - 5.3.11 5.3.12-14 友元 友 ...
- 【C++面向对象】C++中运算符重载的两种方式
我们知道在C++中可以通过重载运算符的方式,使类实现类似于基本类型的运算符操作,如+.-.*./等等.本文介绍这种重载运算符的两种方法. 我们先自定义一个类,来作为本次研究的对象: class Int ...
- 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )
文章目录 函数重载 运算符重载 ( 类内部定义云算符重载 ) 运算符重载 ( 类外部定义运算符重载 ) 可重载的运算符 拷贝构造方法 编译器优化 ( RVO 优化 | NRVO 优化 ) 完整代码示例 ...
- 面向对象编程(三):重载运算符和重载函数
C++ 重载运算符和重载函数 C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载. 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是 ...
- 类的6个默认成员函数:构造函数、析构函数、拷贝构造函数、重载运算符、三/五法则
文章目录 6个默认成员函数 构造函数 概念 默认构造函数的类型 默认实参 概念 默认实参的使用 默认实参声明 全局变量作为默认实参 某些类不能依赖于编译器合成的默认构造函数 第一个原因 第二个原因 第 ...
- c++重载运算符实现分数加减乘除
实现结果如下图所示: 代码如下所示: #include <iostream>using namespace std;class Rational { public:Rational ope ...
- DEVC++(1)单文件实现重载运算符的十六进制数类
本文运用DEVC++软件,通过C++类的定义和重载运算符来实现十六进制数类的运算操作,代码以单文件的方式来构建. 题目描述如下: 设计1~4位的无符号十六进制数据类class HEX. 可以创建如 A ...
- C++ 重载运算符和重载函数
参考:http://www.runoob.com/cplusplus/cpp-overloading.html https://www.cnblogs.com/CaiNiaoZJ/archive/20 ...
- C++ 重载运算符简单举例
我们可以重定义或重载大部分 C++ 内置的运算符.这样,就能使用自定义类型的运算符. 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的.与其他函数一 ...
最新文章
- python官方网站是-Python基础
- bug list---直接访问string内存
- 【转载】如何组建一支优秀的数据分析团队?
- Bit-Z召开全球生态联盟暨韩国战略发布会 将成立BZ资本
- 画胖小人和瘦小人,建造者模式版本
- .NET Worker Service 如何优雅退出
- android获取应用安装通知消息,如何在Android 11 上获取已安装应用列表
- 20以内分数化小数表_如何使用标准正态分布表?
- heap python_数据结构-堆(Heap) Python实现
- 四个变量的图表怎么做_PPT中的图表怎么做才高大上?4步帮你搞定!
- 理解R-CNN、SPP-NET、Fast R-CNN、Faster R-CNN、FPN博文整理
- 软件测试入门到飞升上仙之web 端测试
- 小白Linux入门之:终端复用器Tmux使用参考
- C++编程 Unicode转换成中文
- scala 2.13 并行集合par 的引用
- Redis缓存读写策略
- 关于“城市超脑DIGITAL TWIN”的一些保姆级干货
- python 默认参数后接可变参数_Python可变参数会自动填充前面的默认同名参数实例...
- iOS15.4终于来了 搭配这款便签很舒服
- 阿里云产品经理刘宇:Serverless 的前世今生