Sobrecarga de funciones y tipo de retorno en C++

La sobrecarga de funciones es posible en C++ y Java, pero solo si las funciones deben diferir entre sí por los tipos y el número de argumentos en la lista de argumentos. Sin embargo, las funciones no se pueden sobrecargar si difieren solo en el tipo de devolución. 

¿Por qué no es posible la sobrecarga de funciones con diferentes tipos de devolución? 

La sobrecarga de funciones viene bajo el polimorfismo en tiempo de compilación. Durante la compilación, se comprueba la firma de la función. Por lo tanto, las funciones pueden sobrecargarse si las firmas no son las mismas. El tipo de retorno de una función no tiene efecto en la sobrecarga de funciones, por lo tanto, la misma firma de función con diferente tipo de retorno no se sobrecargará. 

Ejemplo: si hay dos funciones: int sum() y float sum() , estas dos generarán un error en tiempo de compilación ya que aquí no es posible la sobrecarga de funciones.

Entendamos esto más a fondo a través de los siguientes programas en C++ y Java:

Programa C++:

CPP

// CPP Program to demonstrate that function overloading
// fails if only return types are different
#include <iostream>
int fun() { return 10; }
  
char fun() { return 'a'; }
// compiler error as it is a new declaration of fun()
  
// Driver Code
int main()
{
    char x = fun();
    getchar();
    return 0;
}

Producción

prog.cpp: In function ‘char fun()’:
prog.cpp:6:10: error: ambiguating new declaration of ‘char fun()’
char fun() { return 'a'; }
         ^
prog.cpp:4:5: note: old declaration ‘int fun()’
int fun() { return 10; }
    ^

Programa Java:

Java

// Java Program to demonstrate that function overloading
// fails if only return types are different
  
// filename Main.java
public
class Main {
public
    int foo() { return 10; }
public
    char foo() { return 'a'; }
    // compiler error as it is a new declaration of fun()
public
    static void main(String args[]) {}
}

Producción

prog.java:10: error: method foo() is already defined in class Main
   char foo() { return 'a'; }
        ^
1 error

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *