# 1. 运算符重载
对于运算符重载,这里需要首先了解一个符号和对应函数的关系:
| 符号 | 方法 |
| --- | --- |
| ` +` | `plus` |
| `+=` | `plusAssign` |
| `==` | `equals` |
| `> ` | `compareTo` |
| `[]` | `get` |
| `..` | `rangeTo` |
| `in` | `contains`|
# 2. 案例
## 2.1 +
~~~
class Person(var name: String, var age: Int, var man: Boolean){
var number = 1
operator fun plus(person: Person): Person{
this.age += person.age
this.number += person.number
return this
}
}
fun main() {
var person_1 = Person("张三", 23, true)
var person_2 = Person("张三", 22, true)
var person_3 = Person("张三", 21, false)
// 期望person_1 + person_2 + person_3直接得到总年龄大小
var total = person_1 + person_2 + person_3
println("总年龄:${total.age}, 总人数:${total.number}")
}
~~~
结果:
```
总年龄:66, 总人数:3
```
## 2.2 []
同样的,可以定义一个存储容器,然后使用`[]`操作符来进行下标访问。
~~~
data class Person(var name: String, var int: Int, var sex: Boolean){
}
class Node(person: Person?) {
var person: Person? = person
var next: Node? = null
init {
this.next = null
}
}
class Persons {
var size = 0
var dummyNode = Node(null)
fun add(person: Person){
var newNode = Node(person)
newNode.next = dummyNode.next
dummyNode.next = newNode
size++
}
operator fun get(index: Int): Person?{
var i = index
var ptr: Node? = dummyNode
while(i >= 0){
ptr = ptr?.next
i--
}
return ptr?.person
}
}
fun main() {
var person_1 = Person("张三", 23, true)
var person_2 = Person("张三", 22, true)
var person_3 = Person("张三", 21, false)
var persons = Persons()
persons.add(person_1)
persons.add(person_2)
persons.add(person_3)
for(i in 0..(persons.size - 1)){
println(persons[i])
}
}
~~~
结果:
```
Person(name=张三, int=21, sex=false)
Person(name=张三, int=22, sex=true)
Person(name=张三, int=23, sex=true)
```
至于其余的方法这里就不再一一给出案例。
- Kotlin语言基础
- Kotlin的简介
- Kotlin的变量和常见数据类型
- Kotlin的区间
- Kotlin的位运算
- Kotlin的容器
- Kotlin类型检查
- Kotlin的空值处理
- Kotlin的函数
- Kotlin的类
- Kotlin的委托
- Kotlin的延迟加载
- Kotlin的异常
- Kotlin的Lambda表达式
- Kotlin的高阶函数
- Kotlin的标准库中的高阶函数
- Kotlin的泛型
- Kotlin的表达式
- Kotlin的解构
- Kotlin的运算符重载
- Kotlin语言中级
- Kotlin的扩展函数
- Kotlin的扩展属性
- Kotlin的infix关键字
- Kotlin的DSL
- Kotlin的一些注解(和Java互调用)
- Kotlin的lateinit和by lazy
- Kotlin的反射
- Kotlin的匿名接口
- 安卓中的Kotlin
- 数据库操作Room