Назад к вопросам
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
}