Una función es un conjunto de declaraciones que reciben información, realizan algún cálculo específico, y produce resultados. La idea es poner algunos de forma común o repetida. Hicieron tareas juntos para hacer una función de modo que en lugar de escribir el mismo código una y otra vez para diferentes entradas, podamos llamar a esta función.
En términos simples, una función es un bloque de código que se ejecuta sólo cuando se llama.
interruptor c#
Sintaxis:

Sintaxis de función
Ejemplo:
C++
// C++ Program to demonstrate working of a function> #include> using> namespace> std;> // Following function that takes two parameters 'x' and 'y'> // as input and returns max of two input numbers> int> max(> int> x,> int> y)> {> > if> (x>y)> > return> x;> > else> > return> y;> }> // main function that doesn't receive any parameter and> // returns integer> int> main()> {> > int> a = 10, b = 20;> > // Calling above function to find max of 'a' and 'b'> > int> m = max(a, b);> > cout <<> 'm is '> << m;> > return> 0;> }> |
>
>Producción
m is 20>
Complejidad del tiempo: O(1)
Complejidad espacial: O(1)
¿Por qué necesitamos funciones?
- Las funciones nos ayudan en reduciendo la redundancia de código . Si la funcionalidad se realiza en varios lugares del software, entonces, en lugar de escribir el mismo código, una y otra vez, creamos una función y la llamamos en todas partes. Esto también ayuda en el mantenimiento, ya que tenemos que realizar cambios en un solo lugar si realizamos cambios en la funcionalidad en el futuro.
- Las funciones crean código. modular . Considere un archivo grande que tiene muchas líneas de código. Resulta realmente sencillo leer y utilizar el código si el código se divide en funciones.
- Las funciones proporcionan abstracción . Por ejemplo, podemos utilizar funciones de la biblioteca sin preocuparnos por su trabajo interno.
Declaración de función
Una declaración de función le informa al compilador sobre la cantidad de parámetros, los tipos de datos de los parámetros y el tipo de función de retorno. Escribir nombres de parámetros en la declaración de función es opcional pero es necesario incluirlos en la definición. A continuación se muestra un ejemplo de declaraciones de funciones. (Los nombres de los parámetros no están presentes en las siguientes declaraciones)

Declaración de función
Ejemplo:
C++
// C++ Program to show function that takes> // two integers as parameters and returns> // an integer> int> max(> int> ,> int> );> // A function that takes an int> // pointer and an int variable> // as parameters and returns> // a pointer of type int> int> * swap(> int> *,> int> );> // A function that takes> // a char as parameter and> // returns a reference variable> char> * call(> char> b);> // A function that takes a> // char and an int as parameters> // and returns an integer> int> fun(> char> ,> int> );> |
>
>
Tipos de funciones

Tipos de funciones en C++
Función definida por el usuario
Las funciones definidas por el usuario son bloques de código definidos por el usuario/cliente especialmente personalizados para reducir la complejidad de los grandes programas. También se les conoce comúnmente como funciones a medida que están construidos solo para satisfacer la condición en la que el usuario enfrenta problemas y al mismo tiempo reducen la complejidad de todo el programa.
Función de biblioteca
Las funciones de biblioteca también se llaman funciones integradas . Estas funciones son parte de un paquete compilador que ya está definido y consta de una función especial con significados especiales y diferentes. La función incorporada nos da una ventaja ya que podemos usarlas directamente sin definirlas, mientras que en la función definida por el usuario tenemos que declarar y definir una función antes de usarlas.
Por ejemplo: sqrt(), setw(), strcat(), etc.
Paso de parámetros a funciones
Los parámetros pasados a la función se llaman. parámetros reales . Por ejemplo, en el programa siguiente, 5 y 10 son parámetros reales.
Los parámetros recibidos por la función se llaman. parámetros formales . Por ejemplo, en el programa anterior xey son parámetros formales.

Parámetro formal y parámetro real
Hay dos formas más populares de pasar parámetros:
- Pasar por valor: En este método de paso de parámetros, los valores de los parámetros reales se copian en los parámetros formales de la función. Los parámetros reales y formales se almacenan en diferentes ubicaciones de memoria, por lo que cualquier cambio realizado en las funciones no se refleja en los parámetros reales de la persona que llama.
- Pasar por Referencia: Tanto los parámetros reales como los formales se refieren a las mismas ubicaciones, por lo que cualquier cambio realizado dentro de la función se refleja en los parámetros reales de la persona que llama.
Definición de función
Pasar por valor se usa donde el valor de x no se modifica usando la función fun().
C++
// C++ Program to demonstrate function definition> #include> using> namespace> std;> void> fun(> int> x)> {> > // definition of> > // function> > x = 30;> }> int> main()> {> > int> x = 20;> > fun(x);> > cout <<> 'x = '> << x;> > return> 0;> }> |
>
prueba manual
>Producción
x = 20>
Complejidad del tiempo: O(1)
Complejidad espacial: O(1)
Funciones que utilizan punteros
La función fun() espera un puntero ptr a un número entero (o una dirección de un número entero). Modifica el valor en la dirección ptr. El operador de desreferencia * se utiliza para acceder al valor en una dirección. En la declaración '*ptr = 30', el valor en la dirección ptr se cambia a 30. El operador de dirección & se utiliza para obtener la dirección de una variable de cualquier tipo de datos. En la declaración de llamada de función 'fun(&x)', la dirección de x se pasa para que x pueda modificarse usando su dirección.
C++
// C++ Program to demonstrate working of> // function using pointers> #include> using> namespace> std;> void> fun(> int> * ptr) { *ptr = 30; }> int> main()> {> > int> x = 20;> > fun(&x);> > cout <<> 'x = '> << x;> > return> 0;> }> |
>
>Producción
x = 30>
Complejidad del tiempo: O(1)
Complejidad espacial: O(1)
Diferencia entre llamada por valor y llamada por referencia en C++
Llamar por valor | Llamar por referencia |
---|---|
Se pasa una copia del valor a la función. | Se pasa una dirección de valor a la función. |
Los cambios realizados dentro de la función no son reflexionado sobre otras funciones | Los cambios realizados dentro de la función se reflejan. fuera de la función también |
Los argumentos reales y formales se crearán en diferente ubicación de memoria | Los argumentos reales y formales se crearán en misma ubicación de memoria. |
Puntos para recordar sobre las funciones en C++
1. La mayoría de los programas C++ tienen una función llamada main() que el sistema operativo llama cuando un usuario ejecuta el programa.
2. Cada función tiene un tipo de retorno. Si una función no devuelve ningún valor, entonces se utiliza void como tipo de retorno. Además, si el tipo de retorno de la función es nulo, aún podemos usar la declaración de retorno en el cuerpo de la definición de la función sin especificar ninguna constante, variable, etc., mencionando solo la declaración 'return;' simboliza la terminación de la función como se muestra a continuación:
C++
void> function name(> int> a)> {> > .......> // Function Body> > return> ;> // Function execution would get terminated> }> |
>
>
3. Para declarar una función que solo se puede llamar sin ningún parámetro, debemos usar diversión vacía (vacío) . Como nota al margen, en C++, una lista vacía significa que solo se puede llamar a una función sin ningún parámetro. En C++, tanto void fun() como void fun(void) son iguales.
Función principal
La función principal es una función especial. Cada programa C++ debe contener una función llamada main. Sirve como punto de entrada al programa. La computadora comenzará a ejecutar el código desde el comienzo de la función principal.
Tipos de funciones principales
1. Sin parámetros:
CPP
// Without Parameters> int> main() { ...> return> 0; }> |
iterando un mapa en java
>
>
2. Con parámetros:
CPP
// With Parameters> int> main(> int> argc,> char> *> const> argv[]) { ...> return> 0; }> |
>
>
La razón para tener la opción de parámetro para la función principal es permitir la entrada desde la línea de comando. Cuando usa la función principal con parámetros, guarda cada grupo de caracteres (separados por un espacio) después del nombre del programa como elementos en una matriz llamada argv .
Dado que la función principal tiene el tipo de retorno de En t , el programador siempre debe tener una declaración de devolución en el código. El número que se devuelve se utiliza para informar al programa que llama cuál fue el resultado de la ejecución del programa. Devolver 0 indica que no hubo problemas.
Recursividad C++
Cuando se llama a una función dentro de la misma función, se conoce como recursividad en C++. La función que llama a la misma función se conoce como función recursiva.
Una función que se llama a sí misma y no realiza ninguna tarea después de la llamada a la función se conoce como recursividad de cola. En la recursión de cola, generalmente llamamos a la misma función con una declaración de retorno.
Sintaxis:
C++
recursionfunction()> {> > recursionfunction();> // calling self function> }> |
>
>
Para saber más ver Este artículo .
C ++ pasando matriz a función
En C++, para reutilizar la lógica de la matriz, podemos crear una función. Para pasar una matriz a una función en C++, debemos proporcionar solo el nombre de la matriz.
function_name(array_name[]); //passing array to function>
Ejemplo: imprima el número mínimo en la matriz dada.
C++
#include> using> namespace> std;> void> printMin(> int> arr[5]);> int> main()> {> > int> ar[5] = { 30, 10, 20, 40, 50 };> > printMin(ar);> // passing array to function> }> void> printMin(> int> arr[5])> {> > int> min = arr[0];> > for> (> int> i = 0; i <5; i++) {> > if> (min>arreglo[i]) {> > min = arr[i];> > }> > }> > cout <<> 'Minimum element is: '> << min <<> '
'> ;> }> // Code submitted by Susobhan Akhuli> |
>
>Producción
Minimum element is: 10>
Complejidad del tiempo: O(n) donde n es el tamaño de la matriz
Complejidad espacial: O(n) donde n es el tamaño de la matriz.
Sobrecarga de C++ (función)
Si creamos dos o más miembros con el mismo nombre pero diferentes en número o tipo de parámetros, se conoce como sobrecarga de C++. En C++, podemos sobrecargar:
- métodos,
- constructores y
- propiedades indexadas
Los tipos de sobrecarga en C++ son:
- Sobrecarga de funciones
- Sobrecarga del operador
Sobrecarga de funciones de C++
La sobrecarga de funciones se define como el proceso de tener dos o más funciones con el mismo nombre, pero con diferentes parámetros. En la sobrecarga de funciones, la función se redefine utilizando diferentes tipos o una cantidad de argumentos. Sólo a través de estas diferencias un compilador puede diferenciar entre las funciones.
La ventaja de la sobrecarga de funciones es que aumenta la legibilidad del programa porque no es necesario utilizar nombres diferentes para la misma acción.
Ejemplo: cambiar el número de argumentos del método add()
C++
// program of function overloading when number of arguments> // vary> #include> using> namespace> std;> class> Cal {> public> :> > static> int> add(> int> a,> int> b) {> return> a + b; }> > static> int> add(> int> a,> int> b,> int> c)> > {> > return> a + b + c;> > }> };> int> main(> void> )> {> > Cal C;> // class object declaration.> > cout << C.add(10, 20) << endl;> > cout << C.add(12, 20, 23);> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>Producción
30 55>
Complejidad del tiempo: O(1)
Complejidad espacial: O(1)
Ejemplo: cuando el tipo de argumentos varía.
C++
// Program of function overloading with different types of> // arguments.> #include> using> namespace> std;> int> mul(> int> ,> int> );> float> mul(> float> ,> int> );> int> mul(> int> a,> int> b) {> return> a * b; }> float> mul(> double> x,> int> y) {> return> x * y; }> int> main()> {> > int> r1 = mul(6, 7);> > float> r2 = mul(0.2, 3);> > cout <<> 'r1 is : '> << r1 << endl;> > cout <<> 'r2 is : '> << r2 << endl;> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>Producción
r1 is : 42 r2 is : 0.6>
Complejidad del tiempo: O(1)
Complejidad espacial: O(1)
¿Puede la clase abstracta tener constructor?
Sobrecarga de funciones y ambigüedad
Cuando el compilador no puede decidir qué función se invocará entre las funciones sobrecargadas, esta situación se conoce como ambigüedad de sobrecarga de funciones.
Cuando el compilador muestra el error de ambigüedad, el compilador no ejecuta el programa.
Causas de la ambigüedad:
- Conversión de tipo.
- Función con argumentos predeterminados.
- Función con paso por referencia.
Conversión de tipo: -
C++
#include> using> namespace> std;> void> fun(> int> );> void> fun(> float> );> void> fun(> int> i) { cout <<> 'Value of i is : '> << i << endl; }> void> fun(> float> j)> {> > cout <<> 'Value of j is : '> << j << endl;> }> int> main()> {> > fun(12);> > fun(1.2);> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>
El ejemplo anterior muestra un error. La llamada de 'diversión (doble)' sobrecargada es ambigua . fun(10) llamará a la primera función. La diversión (1.2) llama a la segunda función de acuerdo con nuestra predicción. Pero esto no se refiere a ninguna función como en C++, todas las constantes de punto flotante se tratan como dobles, no como flotantes. Si reemplazamos float por double, el programa funciona. Por lo tanto, esta es una conversión de tipo de flotante a doble.
Función con argumentos predeterminados: -
C++
#include> using> namespace> std;> void> fun(> int> );> void> fun(> int> ,> int> );> void> fun(> int> i) { cout <<> 'Value of i is : '> << i << endl; }> void> fun(> int> a,> int> b = 9)> {> > cout <<> 'Value of a is : '> << a << endl;> > cout <<> 'Value of b is : '> << b << endl;> }> int> main()> {> > fun(12);> > return> 0;> }> // Code Submitted By Susobhan Akhuli> |
>
>
El ejemplo anterior muestra un error. La llamada de 'diversión (int)' sobrecargada es ambigua . Fun(int a, int b=9) se puede llamar de dos maneras: la primera es llamando a la función con un argumento, es decir, fun(12) y la otra forma es llamando a la función con dos argumentos, es decir, fun(4). ,5). La función fun(int i) se invoca con un argumento. Por lo tanto, el compilador no pudo seleccionar entre fun(int i) y fun(int a,int b=9).
Función con Pasar por referencia: -
C++
#include> using> namespace> std;> void> fun(> int> );> void> fun(> int> &);> int> main()> {> > int> a = 10;> > fun(a);> // error, which fun()?> > return> 0;> }> void> fun(> int> x) { cout <<> 'Value of x is : '> << x << endl; }> void> fun(> int> & b)> {> > cout <<> 'Value of b is : '> << b << endl;> }> // Code Submitted By Susobhan Akhuli> |
>
>
El ejemplo anterior muestra un error. La llamada de 'diversión (int&)' sobrecargada es ambigua . La primera función toma un argumento entero y la segunda función toma un parámetro de referencia como argumento. En este caso, el compilador no sabe qué función necesita el usuario ya que no hay diferencia sintáctica entre fun(int) y fun(int &).
Función de amigo
- Una función amiga es una función especial en C++ que a pesar de no ser función miembro de una clase tiene el privilegio de acceder a datos privados y protegidos de una clase.
- Una función amiga es una función no miembro o una función ordinaria de una clase, que se declara utilizando la palabra clave amigo dentro de la clase. Al declarar una función como amiga, se otorgan todos los permisos de acceso a la función.
- La palabra clave amigo se coloca sólo en la declaración de función pero no en la definición de función.
- Cuando se llama a la función amiga, no se utiliza ni el nombre del objeto ni el operador de punto. Sin embargo, puede aceptar el objeto como argumento a cuyo valor desea acceder.
- Una función amiga se puede declarar en cualquier sección de la clase, es decir, pública, privada o protegida.
Declaración de función amiga en C++
Sintaxis:
class { friend (argument/s); };>
Ejemplo_1: Encuentra el mayor de dos números usando la función amigo
C++
botón en el centro css
#include> using> namespace> std;> class> Largest {> > int> a, b, m;> public> :> > void> set_data();> > friend> void> find_max(Largest);> };> void> Largest::set_data()> {> > cout <<> 'Enter the first number : '> ;> > cin>>a;> > cout <<> '
Enter the second number : '> ;> > cin>>b;> }> void> find_max(Largest t)> {> > if> (t.a>t.b)> > t.m = t.a;> > else> > t.m = t.b;> > cout <<> '
Largest number is '> << t.m;> }> int> main()> {> > Largest l;> > l.set_data();> > find_max(l);> > return> 0;> }> |
>
>
Producción
Enter the first number : 789 Enter the second number : 982 Largest number is 982>