Funciones (C++) Visual Studio 2015 Otras versiones
Para obtener la documentación más reciente de Visual Studio 2017 RC, consulte Documentación de Visual Studio 2017 RC.
Una función es un bloque de código que realiza alguna operación. Una función puede definir opcionalmente parámetros de entrada que permiten a los llamadores pasar argumentos a la función. Una función también puede devolver un valor como salida. Las funciones son útiles para encapsular las operaciones comunes en un solo bloque reutilizable, idealmente con un nombre que describa claramente lo que hace la función. La función siguiente acepta dos enteros de un llamador y devuelve su suma; a y b son parámetros de tipo int.
int sum(int a, int b) { return a + b; }
La función puede invocarse, o llamarse, desde cualquier número de partes del programa. Los valores que se pasan a la función son los argumentos, cuyos tipos deben ser compatibles con los tipos de parámetro de la definición de función.
int main() { int i = sum(10, 32); int j = sum(i, 66); cout << "The value of j is" << j << endl; // 108 }
No hay ningún límite práctico para la longitud de la función, pero un buen diseño tiene como objetivo funciones que realizan una sola tarea bien definida. Los algoritmos complejos deben dividirse en funciones más sencillas y fáciles de comprender siempre que sea posible.
Las funciones definidas en el ámbito de clase se denominan funciones miembro. En C++, a diferencia de otros lenguajes, una función también pueden definirse en el ámbito de espacio de nombres (incluido el espacio de nombres global implícito). Estas funciones se denominan funciones libres o funciones no miembro; se usan ampliamente en la biblioteca estándar.
Elementos de una declaración de función Una declaración de función mínima consiste en el tipo de valor devuelto, el nombre de función y la lista de parámetros (que puede estar vacía), junto con las palabras clave opcionales que proporcionan instrucciones adicionales para el compilador. Una definición de función se compone de una declaración más el cuerpo, que es todo el código incluido entre llaves. Una declaración de función seguida de un punto y coma puede aparecer en varios lugares de un programa. Debe aparecer antes de cualquier llamada a esa función en cada unidad de traducción. La definición de función debe aparecer solo una vez en el programa, según la regla de una definición (ODR).
Los elementos necesarios de una declaración de función son los siguientes:
El tipo de valor devuelto, que especifica el tipo del valor que devuelve la función, o void si no se devuelve ningún valor. En C++11, auto es un tipo de valor devuelto válido que indica al compilador que debe inferir el tipo de la instrucción return. En C++14, también se permite decltype(auto). Para obtener más información, consulte más adelante Deducción de tipos en tipos de valor devueltos.
El nombre de función, que debe comenzar con una letra o un carácter de subrayado y no puede contener espacios. En general, un carácter de subrayado inicial en los nombres de función de la biblioteca estándar indica funciones de miembro privado o funciones no miembro que no están pensadas para que las use el código.
La lista de parámetros, que es un conjunto delimitado por llaves y separado por comas de cero o más parámetros que especifican el tipo y, opcionalmente, un nombre local mediante el cual se puede acceder a los valores de dentro del cuerpo de la función.
Supongamos, para ejemplificar, que queremos un programa que imprima las primeras 10 potencias de 2 y de 3. Para ello, definiremos una función entera potencia que devuelva, como resultado, el cálculo de un entero n elevado a una potencia entera positiva m, e invocaremos la función potencia desde main con los
correspondientes argumentos. Introducción a la Programación − Notas de Clase Modularidad U.N.S.L. Argentina 50 Departamento de Informática #include <stdio.h> int potencia(int, int); /* prototipo */ main() { int i ; for (i = 0; i <= 10 ; i++) printf("2 a la %d: %d - 3 a la %d: %d \n", i, potencia(2, i), i, potencia(3, i)); return 0; } /* Función que eleva la base n a la potencia m (m >= 0)*/ int potencia(int n, int m) { int i, p; p = 1; for (i = 0; i < m; i++) p = p * n; return p; } La función main invoca dos veces a la función potencia en la línea printf(“%d %d %d \n”, i, potencia(2, i), potencia(3, i)); En cada llamada se pasan dos parámetros actuales o reales (o argumentos) a potencia y esta retorna un valor entero, el que es impreso en pantalla. La primera línea de la definición de la función potencia, int potencia(int n, int m)
declara el tipo y nombre de cada uno de sus parámetros formales así como el tipo del resultado que devuelve la función. La función potencia retorna un valor entero (int) a la función invocante (en este caso a main). Esto ocurre al ejecutarse la sentencia return p; la cual retorna el valor de la variable p y restituye el control a la función main. Sin embargo, no todas las funciones necesitan retornar un valor. En este caso, como veremos en la sección siguiente, el tipo de retorno de la función debe declararse de tipo void. Hay dos maneras de restituir el control a la función invocante sin devolver valor alguno. Una forma de hacerlo es por medio de la sentencia return; y la otra es omitiendo la sentencia return, al alcanzarse en la ejecución la llave derecha de terminación del bloque o cuerpo de la función. Al igual que para las variables, cuando una función se va a usar en un programa, o cuando una función se define en otro fichero (funciones externas), se debe declarar antes del lugar donde se define. La declaración de una función consiste en especificar el tipo de datos que va a retornar la función. Esto es obligatorio cuando vamos a usar una función que no devuelve un entero. Además, en la declaración se puede especificar el número de argumentos y su tipo. Una declaración típica de función es:
tipo identificador( lista_de_argumentos_con_tipo ); Esto avisa al compilador de que la función ya existe, o que la vamos a definir después.
La lista de argumentos con tipo difiere de la lista de argumentos antes presentada en que el tipo de cada argumento se coloca dentro de la lista, antes de su correspondiente identificador, como hacíamos en la definición de variables. Por ejemplo:
char imprime(int numero, int letra);
declara una función que devuelve un carácter y tiene dos parámetros, un entero y un carácter.
La lista de argumentos permite al compilador hacer comprobación de tipos, ya que el tipo y numero de argumentos debe coincidir en la declaración, definición y llamada a una función.
Este tipo de especificación del tipo de argumentos también se puede emplear en la definición de las funciones, aunque lo contrario no es posible. Así, el programa:
#include <stdio.h>
char imprime(int numero, char letra); /* Declara la función "imprime" */
main() { char caracter;
caracter = imprime(100, 'a');
return; }
/* Define una función que imprime un entero y un carácter. Devuelve el mismo carácter de entrada. */ char imprime(int numero, char letra) { printf("%d, %c\n", numero, letra);
return letra;
}