Diferencia entre métodos múltiples y sobrecarga

En multi-métodos usamos la colección de métodos. Y todos los métodos tienen el mismo nombre, la misma cantidad de argumentos y pueden tener firmas de tipo superpuestas. En el caso de métodos múltiples, cuando se realiza una llamada de función, se considera una colección de todos los métodos como métodos posibles. 

Dependiendo del argumento en tiempo de ejecución, se elige el método correcto. Podemos decir que la generalización del polimorfismo de métodos es multimétodos.

En los métodos múltiples, generalmente nos enfocamos en dos cosas:

  • nombre del método.
  • Valor de despacho, que es producido por el método de despacho.

El método correcto se elige en función del valor de envío.

Ejemplo de multi-métodos:

Python3

from multimethod import multimethod
class myClass(object):
      
    @multimethod
    def GFG(self, x: int):
        print(2 * x)
  
    @multimethod
    def GFG(self, x: complex):
        print("GeeksforGeeks")
          
obj = myClass()
obj.GFG(3)
obj.GFG(6j)

Producción:

6

GeeksforGeeks

En caso de sobrecarga , tenemos dos o más métodos con el mismo nombre pero firmas diferentes. La firma significa el tipo de argumento y el número de argumentos.

Es un concepto OOP, en el que tenemos dos o más funciones con el mismo nombre pero diferentes parámetros. En el caso de sobrecarga de funciones, el nombre sería el mismo para todas las funciones, pero serán diferentes entre sí en términos de argumentos.

En la sobrecarga de funciones, es importante que todas las funciones con el mismo nombre deben ser diferentes en términos de argumentos, pueden o no serlo en términos del tipo de devolución. Pueden tener el mismo tipo de retorno o tal vez un tipo de retorno diferente.

prueba int() { }

prueba int(int a) { }

prueba flotante (doble a) { }

prueba int(int a, doble b) { }

Aquí todos son diferentes en términos de argumentos, pueden tener el mismo tipo de devolución.

prueba int(int a) { }

doble prueba(int b){ }

El código anterior es incorrecto porque son diferentes en cuanto al tipo de retorno pero tienen los mismos argumentos. 

Se resuelve estáticamente, es decir, durante el tiempo de compilación, según el tipo de argumentos y el número de argumentos. Es un caso especial de multimétodos.

Ejemplo de sobrecarga de funciones:

C++

#include <bits/stdc++.h>
using namespace std;
  
void display(int i) 
{
    cout << " It is int " << i << endl;
}
void display(double f) 
{
    cout << " It is float " << f << endl;
}
void display(char const *c) 
{
    cout << " It is char* " << c << endl;
}
  
int main() 
{
    display(1);
    display(1.1);
    display("GFG");
    return 0;
}

Producción:

es int 1

es flotante 1.1

Es char* GFG

A continuación se muestra una tabla de diferencias entre métodos múltiples y sobrecarga

S. No.

Multi-métodos

Sobrecarga

1. En métodos múltiples, el método es un envío basado en el valor de envío en tiempo de ejecución En Sobrecarga, el método se selecciona según el tipo de argumentos y la cantidad de argumentos
2. Aquí podemos tener el mismo nombre y el mismo número de argumentos Aquí tenemos el mismo número pero diferente número de argumentos
3. En el caso de los multimétodos, tenemos una firma tipo firma superpuesta En caso de sobrecarga, no tenemos firmas de tipo superpuestas.
4. Se decide en tiempo de ejecución. Se decidió en tiempo de compilación.
5. En los métodos múltiples, usamos el valor de envío para enviar el método en tiempo de ejecución. En la sobrecarga, usamos el tipo de argumento y la cantidad de argumentos para elegir el método correcto en tiempo de compilación.
6. Es una colección de métodos que tienen el mismo nombre y el mismo número de argumentos. En la sobrecarga, son diferentes en términos de argumentos.
7. Pertenece a la función genérica. No pertenece a la función genérica.
8. Es una especie de virtual en cualquier parámetro. no es virtual
9. Depende del tipo real de receptor y argumentos. Depende del tipo declarado de los parámetros.

Publicación traducida automáticamente

Artículo escrito por sftrengdeepak y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *