Назад к вопросам
Middle
89
questionbank

Что такое перегрузка операторов и как её использовать?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Перегрузка операторов в Kotlin позволяет определить или переопределить поведение стандартных операторов (например, +, -, *, /) для пользовательских типов данных.

Используется путем определения специальных функций-членов или функций-расширений с фиксированными именами, помеченными ключевым словом operator.

Функции для перегрузки операторов:

Оператор Имя функции
+ plus
- minus
* times
/ div
% rem, mod
.. rangeTo
in contains
== equals
!= equals (инвертированный результат)
< compareTo
> compareTo
<= compareTo
>= compareTo
[] get, set
() invoke
a += b plusAssign
a -= b minusAssign
a *= b timesAssign
a /= b divAssign
a %= b remAssign, modAssign
+a unaryPlus
-a unaryMinus
!a not
a++, ++a inc
a--, --a dec

Пример перегрузки оператора + для класса Vector:

data class Vector(val x: Int, val y: Int) {
    // Перегрузка оператора "+"
    operator fun plus(other: Vector): Vector {
        return Vector(x + other.x, y + other.y)
    }
}

fun main() {
    val v1 = Vector(1, 2)
    val v2 = Vector(3, 4)
    val v3 = v1 + v2 // Использование перегруженного оператора
    println(v3) // Вывод: Vector(x=4, y=6)
}

Пример перегрузки оператора [] (get) для класса-коллекции:

class MyContainer(private val elements: List<String>) {
    // Перегрузка оператора "[]" (get)
    operator fun get(index: Int): String {
        return elements[index]
    }
}

fun main() {
    val container = MyContainer(listOf("A", "B", "C"))
    val element = container[1] // Использование перегруженного оператора
    println(element) // Вывод: B
}