Operator overloading lets you use normal symbols like + or * with your own types. It makes your code easier to read and write.
Operator overloading concept in Kotlin
operator fun plus(other: ClassName): ClassName { // code to add this and other return result }
The operator keyword tells Kotlin this function is for operator overloading.
You define functions with names like plus, minus, times to overload +, -, * respectively.
Point objects using the + operator.operator fun plus(other: Point): Point { return Point(x + other.x, y + other.y) }
Point by an integer using the * operator.operator fun times(scale: Int): Point { return Point(x * scale, y * scale) }
Point objects using <, > operators.operator fun compareTo(other: Point): Int { return this.x.compareTo(other.x) }
This program creates a Point class with operator functions to add points and multiply by a number. It shows how to use + and * with Point objects.
data class Point(val x: Int, val y: Int) { operator fun plus(other: Point): Point { return Point(x + other.x, y + other.y) } operator fun times(scale: Int): Point { return Point(x * scale, y * scale) } } fun main() { val p1 = Point(2, 3) val p2 = Point(4, 5) val p3 = p1 + p2 val p4 = p3 * 2 println("p3 = $p3") println("p4 = $p4") }
Only certain operators can be overloaded in Kotlin.
Operator functions must be marked with the operator keyword.
Overloading operators makes your code cleaner but use it only when it makes sense.
Operator overloading lets you use symbols like +, -, * with your own classes.
Use the operator keyword before functions like plus, times.
This makes your custom types easier and nicer to work with.
Practice
Solution
Step 1: Understand operator overloading purpose
Operator overloading lets you define how operators like + work with your own classes.Step 2: Check options meaning
Only Use standard operators like + or * with your own classes correctly states this ability. Options A, B, and C are incorrect because Kotlin does not let you change built-in types, create new operators, or disable operators this way.Final Answer:
Use standard operators like + or * with your own classes -> Option DQuick Check:
Operator overloading = Use operators with custom classes [OK]
- Thinking you can create new operators
- Believing it changes built-in types
- Confusing disabling operators with overloading
Solution
Step 1: Recall operator function syntax
In Kotlin, to overload an operator, the function must be marked with the keywordoperatorbefore the function declaration.Step 2: Analyze options
operator fun plus(other: MyClass): MyClass { ... } correctly usesoperator fun plus(...). fun plus(other: MyClass): MyClass { ... } misses theoperatorkeyword, C wrongly usesoverride, and D has incorrect keyword order.Final Answer:
operator fun plus(other: MyClass): MyClass { ... } -> Option AQuick Check:
Operator keyword before function = Correct syntax [OK]
- Omitting the 'operator' keyword
- Using 'override' instead of 'operator'
- Placing 'operator' after 'fun'
data class Point(val x: Int, val y: Int) {
operator fun plus(other: Point) = Point(x + other.x, y + other.y)
}
fun main() {
val p1 = Point(1, 2)
val p2 = Point(3, 4)
val p3 = p1 + p2
println(p3)
}Solution
Step 1: Understand operator plus function
The plus operator adds the x and y values of two Point objects and returns a new Point with summed coordinates.Step 2: Calculate the result of p1 + p2
p1 has (1, 2), p2 has (3, 4). Adding gives (4, 6). Printing p3 calls data class's toString(), which outputs 'Point(x=4, y=6)'.Final Answer:
Point(x=4, y=6) -> Option AQuick Check:
p1 + p2 = Point(x=4, y=6) [OK]
- Expecting just coordinates without property names
- Thinking '+' prints expression instead of result
- Assuming compilation error without operator keyword
class Counter(var count: Int) {
fun minus(other: Counter): Counter {
return Counter(count - other.count)
}
}Solution
Step 1: Check operator overloading syntax
To overload an operator in Kotlin, the function must have the 'operator' keyword before its declaration.Step 2: Analyze the code
The minus function lacks the 'operator' keyword, so Kotlin won't treat it as operator overloading, causing errors when using '-'.Final Answer:
Missing 'operator' keyword before the minus function -> Option BQuick Check:
Operator functions need 'operator' keyword [OK]
- Forgetting the 'operator' keyword
- Changing function name incorrectly
- Assuming operator overloading is not allowed
class Vector(val x: Int, val y: Int) {
operator fun plus(other: Vector) = Vector(x + other.x, y + other.y)
operator fun times(scalar: Int) = Vector(x * scalar, y * scalar)
}What is the result of this expression?
val v1 = Vector(2, 3)
val v2 = Vector(1, 1)
val result = (v1 + v2) * 2
println("(${result.x}, ${result.y})")Solution
Step 1: Evaluate v1 + v2
v1 is (2,3), v2 is (1,1). Adding gives Vector(3,4).Step 2: Multiply the result by 2
Vector(3,4) times 2 gives Vector(6,8).Step 3: Print the result
Printing prints (6, 8) as expected.Final Answer:
(6, 8) -> Option CQuick Check:
(v1 + v2) * 2 = (6, 8) [OK]
- Multiplying v2 by 2 instead of the sum
- Ignoring operator precedence
- Expecting compilation error
Ready to prove it?
Pass the test and this pattern moves unknown
