English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste artigo, você aprenderá sobre função sobreescrita, quando precisamos de função sobreescrita e como sobreescrita de exemplo.
com o mesmo nome mas com diferentes parâmetrosFunçãoChamada de função sobreescrita.
Imaginando que você está desenvolvendo um jogo de tiro, onde o jogador pode atacar com espadas, espadas e pistolas. Sua solução para a função de ataque pode ser definir a operação como função:
func attack() { //.. print("ataque com espada") } func attack() { //.. print("用剑攻击") } func attack() { //.. print("ataque com pistola") }
Mas, ao tentar executar o programa acima, você receberá erros de compilação no Swift, como 'attack()' previamente declarado aqui。Mas, outra solução pode ser definir nomes de funções diferentes para funções específicas, conforme mostrado a seguir:
struct Knife { } struct Gun { } struct Blade { } func attackUsingKnife(weapon: Knife) { //.. print("ataque com espada") } func attackUsingBlade(weapon: Blade) { //.. print("用剑攻击") } func attackUsingGun(weapon: Gun) { //.. print("ataque com pistola") }
Se você não sabe o que é struct, não se preocupe. Agora, considere-o como algo que cria objetos físicos em programação, então você está criando uma espada, pistola e espada.
O único problema com essa solução é que você precisa lembrar-se do nome da função para chamar a operação de ataque específica. Da mesma forma, conforme o aumento do nível, o jogador pode ter outras funções de ataque, como bombas, granadas, rifles e outros.
Criar funções com nomes diferentes é demorado e aumenta o custo de memorização dos nomes das funções para chamá-las. Em resumo, isso não é muito intuitivo.
Se pudermos criar funções diferentes com o mesmo nome para cada tipo de arma, isso seria melhor. Dessa forma, lembrar-se de um único nome de função seria suficiente, e você não precisaria se preocupar com os nomes das funções de outras armas.
O processo que acabamos de descrever é chamado de função sobreescrita. De acordo com a definição, o processo de criar duas ou mais funções com o mesmo nome mas com diferentes números ou tipos de parâmetros passados é chamado de função sobreescrita.
Vamos ver isso em um exemplo a seguir:
struct Knife { } struct Gun { } struct Blade { } func attack(with weapon: Knife) { print("ataque com espada") } func attack(with weapon: Gun) { print("ataque com pistola") } func attack(with weapon: Blade) { print("用剑攻击") } attack(with: Gun()) attack(with: Blade()) attack(with: Knife())
Quando você executar o programa acima, a saída será:
用枪攻击 用剑攻击 用刀攻击
在以上程序中,我们创建了三个具有相同名称的不同函数attack。但是,它接受不同的参数类型。这样,记住 attack 名称即可调用函数。
调用 attack(with: Gun()) 将触发函数内部的 func attack(with weapon:Gun) 语句。
调用 attack(with: Blade()) 将触发函数内部的 func attack(with weapon:Blade) 语句。
调用 attack(with: Knife()) 将触发函数内部的 func attack(with weapon:Knife) 语句。
func output(x: Int) { print("int值是 (x)") } func output(x: String) { print("字符串值是 (x)") } output(x: 2) output(x: "Swift")
Quando você executar o programa acima, a saída será:
int值是 2 字符串值是 Swift
在上面的程序中,我们有两个具有相同名称和相同数量参数的函数output()。但是,第一个output()函数将整数作为参数,第二个output()函数将String参数作为参数。
与示例1类似,
调用 output(x: 2) 会触发函数内部的 func output(x:Int) 语句
调用 output(x: "Swift") 会触发函数内部的 func output(x:String) 语句。
func output() { print("Bom Dia!") } func output(text: String) { print(text) } func output(text: String, num: Int) { print("(text)(num)!") } output() output(text: "Boa Noite!") output(text1: "Bom N", num: 8)
Quando você executar o programa acima, a saída será:
Bom Dia! Boa Noite! Boa Noite!
No programa acima, a função output() foi sobrecarregada com base no número de parâmetros.
O primeiro output() sem parâmetros, o segundo output() com um parâmetro: String, o terceiro output() com dois parâmetros: String e Int.
Vamos tentar sobrecarregar através de alteração do nome do parâmetro, mas mantendo as etiquetas de parâmetro inalteradas, conforme mostrado a seguir:
func output(value text: String) { print(text) } func output(value num: Int) { print(num) } output(value: 2) output(value: "Olá")
Quando você executar o programa acima, a saída será:
2 Olá
Como você vê, no programa acima, é possível usar a mesma etiqueta de parâmetro para funções sobrecarregadas. No entanto, de acordo com os requisitos de sobrecarga, você deve ter um número diferente de parâmetros ou parâmetros de tipos diferentes.