C++ Funciones
Una función es un conjunto de declaraciones que ejecutan juntas una tarea. Cada programa de C++ tiene al menos una función, la función principal,main()y todos los programas simples pueden definir otras funciones adicionales.
Puede dividir el código en diferentes funciones. La forma de dividir el código en diferentes funciones depende de usted, pero lógicamente, la división suele realizarse de manera que cada función ejecute una tarea específica.
FunciónDeclaraciónle dice al compilador el nombre de la función, el tipo de retorno y los parámetros. La funcióndefiniciónproporciona el cuerpo real de la función.
La biblioteca estándar de C++ proporciona una gran cantidad de funciones integradas que los programas pueden invocar. Por ejemplo, la funciónstrcat()se utiliza para concatenar dos cadenas, la funciónmemcpy()se utiliza para copiar memoria a otra ubicación.
Las funciones también reciben muchos otros nombres, como métodos, subrutinas o procedimientos, entre otros.
Definición de funciones
La forma general de la definición de una función en C++ es la siguiente:
En C++, una función se compone de un encabezado de función y un cuerpo de función. A continuación se enumeran todas las partes que componen una función:
- Tipo de retorno:Una función puede devolver un valor.return_typees el tipo de dato del valor que devuelve la función. Algunas funciones realizan la operación deseada sin devolver un valor; en ese caso, return_type es la palabra clavevoid。
- Nombre de la función:Este es el nombre real de la función. El nombre de la función y la lista de parámetros juntos constituyen la firma de la función.
- Parámetros:Los parámetros son como marcadores de posición. Cuando se llama a la función, se pasa un valor al parámetro; este valor se denomina argumento real. La lista de parámetros incluye el tipo, el orden y la cantidad de parámetros de la función. Los parámetros son opcionales, es decir, la función puede no contener parámetros.
- Cuerpo de la función:El cuerpo de la función contiene un conjunto de declaraciones que definen la tarea que realiza la función.
Ejemplo
A continuación se presenta elmax()código fuente de la función. Esta función tiene dos parámetros num1 y num2, y devuelve el mayor de los dos números:
Declaración de funciones
Una funcióndeclaraciónle dice al compilador el nombre de la función y cómo invocarla. El cuerpo real de la función se puede definir por separado.
La declaración de la función incluye las siguientes partes:
return_type function_name( parameter list );
Para la función max() definida anteriormente, la declaración es la siguiente:
int max(int num1, int num2);
En la declaración de la función, el nombre de los parámetros no es importante; solo el tipo de los parámetros es necesario. Por lo tanto, la siguiente también es una declaración válida:
int max(int, int);
Cuando define una función en un archivo fuente y la invoca en otro archivo, la declaración de la función es necesaria. En ese caso, debe declarar la función en la parte superior del archivo donde se invoca la función.
Llamada a funciones
Al crear una función en C++, se define lo que hace la función y luego se llama a la función para realizar la tarea definida.
Cuando el programa llama a una función, el control del programa se transfiere a la función invocada. La función invocada ejecuta la tarea definida; cuando se ejecuta la declaración de retorno de la función o se alcanza la llave de cierre de la función, el control del programa se devuelve al programa principal.
Al llamar a una función, se pasan los parámetros requeridos; si la función devuelve un valor, se puede almacenar el valor de retorno. Por ejemplo:
Ejemplo
Coloque la función max() y la función main() juntas y compile el código fuente. Al ejecutar el archivo ejecutable final, se producirá el siguiente resultado:
Max value is : 200
Parámetros de funciones
Si la función va a utilizar parámetros, debe declarar variables que acepten los valores de los parámetros. Estas variables se denominanparámetros formales。
Los parámetros formales son como otras variables locales dentro de la función: se crean al entrar en la función y se destruyen al salir de ella.
Al llamar a una función, hay tres formas de pasar parámetros a la función:
| Tipo de llamada | Descripción |
|---|---|
| Llamada por valor | Este método asigna el valor real del parámetro al parámetro formal de la función. En este caso, modificar el parámetro formal dentro de la función no tiene efecto sobre el parámetro real. |
| Llamada por puntero | Este método asigna la dirección del parámetro al parámetro formal. Dentro de la función, esa dirección se utiliza para acceder al parámetro real utilizado en la llamada. Esto significa que modificar el parámetro formal afecta al parámetro real. |
| Llamada por referencia | Este método asigna la referencia del parámetro al parámetro formal. Dentro de la función, esa referencia se utiliza para acceder al parámetro real utilizado en la llamada. Esto significa que modificar el parámetro formal afecta al parámetro real. |
Por defecto, C++ utilizala llamada por valorpara pasar parámetros. En general, esto significa que el código dentro de la función no puede cambiar los argumentos utilizados para llamar a la función. En el ejemplo mencionado anteriormente, al llamar a la función max() se utilizó el mismo método.
Valores predeterminados de los parámetros
Cuando define una función, puede especificar un valor predeterminado para cada parámetro que se encuentra al final de la lista de parámetros. Al llamar a la función, si el valor del argumento real se deja vacío, se utiliza este valor predeterminado.
Esto se hace asignando un valor al parámetro mediante el operador de asignación en la definición de la función. Al llamar a la función, si no se pasa el valor del parámetro, se utiliza el valor predeterminado; si se especifica un valor, se ignora el valor predeterminado y se utiliza el valor pasado. Vea el siguiente ejemplo:
Ejemplo
Cuando el código anterior se compila y se ejecuta, produce el siguiente resultado:
Total value is :300 Total value is :120
Funciones y expresiones Lambda
C++11 proporciona soporte para funciones anónimas, denominadas funciones Lambda (también llamadas expresiones Lambda).
Las expresiones Lambda tratan las funciones como objetos. Las expresiones Lambda pueden usarse como objetos, por ejemplo, pueden asignarse a variables y pasarse como parámetros, y también pueden evaluarse como funciones.
Una expresión Lambda es esencialmente muy similar a una declaración de función. La forma concreta de una expresión Lambda es la siguiente:
[capture](parameters)->return-type{body}
Por ejemplo:
[](int x, int y){ return x < y ; }
Si no hay valor de retorno, se puede expresar como:
[capture](parameters){body}
Por ejemplo:
[]{ ++global_x; }
En un ejemplo más complejo, el tipo de retorno puede especificarse explícitamente de la siguiente manera:
[](int x, int y) -> int { int z = x + y; return z + x; }
En este ejemplo, se crea un parámetro temporal z para almacenar el resultado intermedio. Como en una función normal, el valor de z no se conserva hasta la próxima vez que se vuelva a llamar a esta función anónima.
Si la función lambda no devuelve un valor (por ejemplo, void), su tipo de retorno puede omitirse por completo.
Dentro de una expresión Lambda se puede acceder a las variables del ámbito actual; este es el comportamiento de cierre (closure) de la expresión Lambda. A diferencia de los cierres de JavaScript, en C++ la transferencia de variables tiene la distinción entre paso por valor y paso por referencia. Esto se puede especificar mediante [] al inicio:
[] // 沒有定义任何变量。使用未定义变量会引发错误。 [x, &y] // x以传值方式传入(默认),y以引用方式传入。 [&] // 任何被使用到的外部变量都隐式地以引用方式加以引用。 [=] // 任何被使用到的外部变量都隐式地以传值方式加以引用。 [&, x] // x显式地以传值方式加以引用。其余变量以引用方式加以引用。 [=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。
Además, hay un punto a tener en cuenta. Para las formas [=] o [&], la expresión lambda puede usar directamente el puntero this. Sin embargo, para la forma [], si se quiere usar el puntero this, debe pasarse explícitamente:
[this]() { this->someFunc(); }();
Otras extensiones