Pregunta

¿Qué significa " Sobrecargado " / " Sobrecarga " significa en lo que respecta a la programación?

¿Fue útil?

Solución

Significa que está proporcionando una función (método u operador) con el mismo nombre, pero con una firma diferente. Por ejemplo:

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

Otros consejos

Concepto básico

Sobrecarga, o "sobrecarga de métodos" es el nombre del concepto de tener más de un método con el mismo nombre pero con diferentes parámetros.

Por ej. La clase System.DateTime en c # tiene más de un método ToString. El ToString estándar utiliza la cultura predeterminada del sistema para convertir la fecha y hora en una cadena:

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

mientras que otra sobrecarga del mismo método permite al usuario personalizar el formato:

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

A veces, el nombre del parámetro puede ser el mismo, pero los tipos de parámetros pueden ser diferentes:

Convert.ToInt32(123m);

convierte un decimal a int mientras

Convert.ToInt32("123");

convierte una cadena a int.

Resolución de sobrecarga

Para encontrar la mejor sobrecarga para llamar, el compilador realiza una operación llamada "resolución de sobrecarga". Para el primer ejemplo, el compilador puede encontrar el mejor método simplemente haciendo coincidir el recuento de argumentos. Para el segundo ejemplo, el compilador llama automáticamente a la versión decimal del método de reemplazo si pasa un parámetro decimal y llama a la versión de cadena si pasa un parámetro de cadena. De la lista de salidas posibles, si el compilador no puede encontrar una adecuada para llamar, obtendrá un error del compilador como "La mejor sobrecarga no coincide con los parámetros ...".

Puede encontrar lotes de información sobre cómo los diferentes compiladores realizan la resolución de sobrecarga.

Una función se sobrecarga cuando tiene más de una firma. Esto significa que puede llamarlo con diferentes tipos de argumentos. Por ejemplo, puede tener una función para imprimir una variable en la pantalla, y puede definirla para diferentes tipos de argumentos:

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

En este caso, la función print () tendría tres sobrecargas.

Significa tener diferentes versiones de la misma función que toman diferentes tipos de parámetros. Dicha función está "sobrecargada". Por ejemplo, tome la siguiente función:

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

Puede usar esta función para imprimir una cadena en la pantalla. Sin embargo, esta función no se puede usar cuando desea imprimir un número entero, luego puede hacer una segunda versión de la función, como esta:

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

Ahora la función está sobrecargada, y la versión de la función que se llamará depende de los parámetros que le asigne.

Otros han respondido qué es una sobrecarga. Cuando está comenzando, se confunde con anulación / anulación.

A diferencia de la sobrecarga, la anulación es definir un método con la misma firma en la subclase (o clase secundaria), que anula la implementación de las clases principales. Algunos idiomas requieren una directiva explícita, como la función de miembro virtual en C ++ o override en Delphi y 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.");
    }
}

Un método sobrecargado es uno con varias opciones para el número y tipo de parámetros. Por ejemplo:

foo(foo)

foo(foo, bar)

ambos harían relativamente lo mismo, pero uno tiene un segundo parámetro para más opciones

También puede hacer que el mismo método tome diferentes tipos

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

Al igual que en el uso común, se refiere a algo (en este caso, un nombre de método), que hace más de un trabajo.

Sobrecarga es la versión pobre de multimethods de CLOS y otros idiomas . Es el confuso.

Reemplazar es el OO habitual. Va con herencia, también lo llamamos redefinición (por ejemplo, en https: / La respuesta de /stackoverflow.com/users/3827/eed3si9n Line proporciona una definición especializada de Draw () .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top