Pergunta

O que significa "sobrecarregado"/"sobrecarga" em relação à programação?

Foi útil?

Solução

Isso significa que você está fornecendo uma função (método ou operador) com o mesmo nome, mas com uma assinatura diferente. Por exemplo:

void doSomething();
int doSomething(string x);
int doSomething(int a, int b, int c);

Outras dicas

Conceito básico

Sobrecarregar ou "sobrecarga do método" é o nome do conceito de ter mais de um método com o mesmo nome, mas com parâmetros diferentes.

Para o EG System.DateTime Class em C# possui mais de um método de tostragem. A tostragem padrão usa a cultura padrão do sistema para converter o datetime em string:

new DateTime(2008, 11, 14).ToString(); // returns "14/11/2008" in America

Enquanto outra sobrecarga do mesmo método permite ao usuário personalizar o formato:

new DateTime(2008, 11, 14).ToString("dd MMM yyyy"); // returns "11 Nov 2008"

Às vezes, o nome do parâmetro pode ser o mesmo, mas os tipos de parâmetros podem diferir:

Convert.ToInt32(123m);

converte um decimal em int enquanto

Convert.ToInt32("123");

converte uma string para int.

Resolução de sobrecarga

Para encontrar a melhor sobrecarga para ligar, o Compiler executa uma operação chamada "Resolução de sobrecarga". Para o primeiro exemplo, o compilador pode encontrar o melhor método simplesmente correspondendo à contagem de argumentos. Para o segundo exemplo, o compilador chama automaticamente a versão decimal do método de substituição se você passar por um parâmetro decimal e chamar a versão da string se você passar um parâmetro de string. A partir da lista de saídas possíveis, se o Compiler não conseguir encontrar um adequado para ligar, você receberá um erro do compilador como "a melhor sobrecarga não corresponde aos parâmetros ...".

Você pode achar Muitas informações sobre como diferentes compiladores executam resolução de sobrecarga.

Uma função é sobrecarregada quando possui mais de uma assinatura. Isso significa que você pode chamá -lo com diferentes tipos de argumento. Por exemplo, você pode ter uma função para imprimir uma variável na tela e pode defini -la para diferentes tipos de argumento:

void print(int i);
void print(char i);
void print(UserDefinedType t);

Nesse caso, a função print () teria três sobrecargas.

Isso significa ter versões diferentes da mesma função que levam diferentes tipos de parâmetros. Essa função está "sobrecarregada". Por exemplo, pegue a seguinte função:

void Print(std::string str) {
  std::cout << str << endl;
}

Você pode usar esta função para imprimir uma string na tela. No entanto, essa função não pode ser usada quando você deseja imprimir um número inteiro, você pode fazer uma segunda versão da função, como esta:

void Print(int i) {
  std::cout << i << endl;
}

Agora, a função está sobrecarregada e qual versão da função será chamada depende dos parâmetros que você o fornecer.

Outros responderam o que é uma sobrecarga. Quando você está começando, ele fica confuso com a substituição/substituição.

Ao contrário da sobrecarga, a substituição está definindo um método com a mesma assinatura na subclasse (ou classe infantil), que substitui a implementação das classes pais. Algum idioma exige diretiva explícita, como virtual Função de membro em C ++ ou override em Delphi e C#.

using System;

public class DrawingObject
{
    public virtual void Draw()
    {
        Console.WriteLine("I'm just a generic drawing object.");
    }
}

public class Line : DrawingObject
{
    public override void Draw()
    {
        Console.WriteLine("I'm a Line.");
    }
}

Um método sobrecarregado é um com várias opções para o número e tipo de parâmetros. Por exemplo:

foo(foo)

foo(foo, bar)

Ambos faria relativamente a mesma coisa, mas um tem um segundo parâmetro para mais opções

Além disso, você pode ter o mesmo método, levando diferentes tipos

int Convert(int i)
int Convert(double i)
int Convert(float i)

Assim como no uso comum, refere -se a algo (neste caso, um nome de método), fazendo mais de um trabalho.

Sobrecarga é a versão do pobre homem de Multimetodos de Clos e de outros idiomas. É o confuso.

Substituindo é o OO usual. É com herança, chamamos de redefinição também (por exemplo, em https://stackoverflow.com/users/3827/eed3si9n's Resposta Line fornece uma definição especializada de Draw().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top