data class Point(val x: Int, val y: Int) {
operator fun plus(other: Point): Point {
return Point(x + other.x, y + other.y)
}
}
fun main() {
val p1 = Point(10, 20)
val p2 = Point(30, 40)
println(p1 + p2)
// Point(x=40, y=60)
}
data class Point(val x: Int, val y: Int) {}
operator fun Point.plus(other: Point): Point = Point(x + other.x, y + other.y)
fun main() {
val p1 = Point(10, 20)
val p2 = Point(30, 40)
println(p1 + p2)
// Point(x=40, y=60)
}
a * b → times
a / b → div
a % b → mod
a + b → plus
a - b → minus
오버로딩으로 함수를 구현해도 연산자 우선순위는 변하지 않음
operator fun Point.times(scale: Double): Point =
Point((x * scale).toInt(), (y * scale).toInt())
fun main() {
val p1 = Point(10, 20)
println(p1 * 1.5)
// Point(x=15, y=30)
}
operator fun Double.times(p: Point) : Point =
Point((absoluteValue * p.x).toInt(), (absoluteValue * p.y).toInt())
fun main() {
val p1 = Point(10, 20)
println(1.5 * p1)
// Point(x=15, y=30)
}
operator fun Char.times(count: Int): String =
toString().repeat(count)
fun main() {
println('a' * 3)
// aaa
}
operator fun Point.plus(other: Point): Point =
Point(x + other.x, y + other.y)
fun main() {
var point = Point(1, 2)
point += Point(3, 4)
println(point)
// Point(x=4, y=6)
}
operator fun <T> MutableCollection<T>.plusAssign(element: T) {
this.add(element)
}
operator fun Point.unaryMinus(): Point = Point(-x, -y)
fun main() {
val p = Point(10, 20)
println(-p)
// Point(x=-10, y=-20)
}
import java.math.BigDecimal
operator fun BigDecimal.inc() = this + BigDecimal.ONE
fun main() {
var bd = BigDecimal.ZERO
println(bd++)
// 0
println(bd)
// 1
println(++bd)
// 2
}