🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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) ``` 至于其余的方法这里就不再一一给出案例。