You are on page 1of 6

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;
}