Swift语言精要 - Operator(运算符重载)

运算符重载

Swift的这一语言特性或许应该启发于C++

class Vector2D {
    var x : Float = 0.0
    var y : Float = 0.0
    init (x : Float, y: Float) {
        self.x = x
        self.y = y
    }
    func +(left : Vector2D, right: Vector2D) -> Vector2D {
        let result = Vector2D(x: left.x + right.x, y: left.y + right.y)
        return result
    }
}

测试代码如下:

let first = Vector2D(x: 2, y: 2)
let second = Vector2D(x: 4, y: 1)
let result = first + second
// = (x:6, y:3)
时间: 2024-12-24 05:32:41

Swift语言精要 - Operator(运算符重载)的相关文章

Swift语言指南(九)--基本运算符

运算符(operator)是用来检查,改变或合并值的一种特殊符号或短语.例如,加号运算符让两个数字相加(如:let i = 1 + 2),还有些更复杂的运算符,如逻辑与运算符(&&)(如:if enteredDoorCode && passedRetinaScan)和自增运算符(++i)(将 i 的值加 1 的便捷写法). Swift 支持标准C语言的大多数运算符,并且改进了一些特性以规避常见的代码错误.赋值运算符(=)是没有返回值的,这样是为了避免在使用等于运算符(==)

嵌入式linux C++语言(六)——运算符重载

嵌入式linux C++语言(六)--运算符重载 运算符重载的本质是函数重载. 一.重载基础 1.运算符重载的语法 返值类型 operator 运算符名称(形参表列){    重载实体;} 2.友元重载 可以将运算符重载函数声明位友元函数 #include <iostream> using namespace std; class Complex { public:     Complex(float x=0, float y=0)         :_x(x),_y(y){}     voi

为什么operator&lt;&lt;&gt;&gt;运算符重载一定要为友元函数呢?

如果是重载双目操作符(即为类的成员函数),就只要设置一个参数作为右侧运算量,而左侧运算量就是对象本身...... 而 >>  或<< 左侧运算量是 cin或cout 而不是对象本身,所以不满足后面一点........就只能申明为友元函数了... 如果一定要声明为成员函数,只能成为如下的形式: ostream & operator<<(ostream &output) { return output; } 所以在运用这个<<运算符时就变为这种形

Swift语言精要-闭包(Closure)

闭包(Closure)这个概念如果没学过Swift的人应该也不会陌生. 学过Javascript的朋友应该知道,在Javascript中我们经常会讨论闭包,很多前端工程师的面试题也会问到什么是闭包. 那么,什么是闭包呢? 让我们看下在Javascript中闭包的解释: Closures are functions that have access to variables from another function’s scope. (This is often accomplished by

cout 堆栈,operator&lt;&lt; 运算符重载输出问题

在C++中cout的输出流当中,有一些问题很容易出错,就比如下面这道简单程序,看似简单,但却是一个值得深思的问题~~ #include <iostream> using namespace std; int foo(int &x) { cout << "第" << x << "次调用" << " "; return ++x; } int main() { int i = 1; c

Swift语言精要 - 序列化和反序列化

在swift中你可以把一个对象转换成为数据,你所要做的就是 首先,你需要让对象实现NSObject和NSCoding协议. 其次,实现以下两个方法: encodeWithCoder init(coder aDecoder: NSCoder)  // 一个带NSCoder参数的初始化器 例子代码: class SerializableObject : NSObject, NSCoding { var name : String? func encodeWithCoder(aCoder: NSCod

Swift语言精要 - 属性

1. Stored Property eg: var number: Int = 0 2. Computed Property eg: var area : Double { get { return width * height } ... } 完整代码如下: class Rectangle { var width: Double = 0.0 var height: Double = 0.0 var area : Double { // computed getter get { return

Swift语言精要 - 浅谈代理模式(Delegate)

在iOS编程中,我们经常谈到代理代理,也就是delegate,那么什么是代理呢? 我们来看一下cocoa对它的描述: Delegation is Cocoa’s term for passing off some responsibilities of an object to another 顾名思义: 代理是把职责从一个对象传到另一个对象. 其实,如果编写过Java或者C#程序的朋友应该知道,我们在设计的时候经常使用到接口和组合,道理是一样的. 看一下下面的代码: 首先,我们定义一个协议 p

Swift语言精要 - Dictionary(字典)

字典以键值对的形式存储数据. 键不能重复,但是值可以重复. 基本语法用例: var states : Dictionary<String, String> = ["CA" : "California"] var states : [String : String] = ["CA" : "California"] 也可以使用类型推断的方式: var states = ["CA" : "C