Binary operators overloading in Swift

class Point {
    var x: Int
    var y: Int
    
    init(x: Int, y: Int) {
        self.x = x
        self.y = y
    }
}

//global function
func + (left: Point, right: Point) -> Point {
    return Point(x: left.x + right.x, y: left.y + right.y)
}

//global function
func += (inout left: Point, right: Point) {
    left = Point(x: left.x + right.x, y: left.y + right.y)
}

let p1 = Point(x: 1, y: 1)
let p2 = Point(x: 2, y: 2)
var p3 = p1 + p2
//p3.x is 3 and p3.y is 3
p3 += Point(x: 3, y: 5)
//p3.x is 6 and p3.y is 8