Está en la página 1de 20

funciones

by Jorge Anzaldo
Componentes de los programas en C++
Por lo general, los programas en C++ se escriben mediante la combinación de
nuevas funciones y clases que escribimos con funciones “pre-empaquetadas”, y
clases disponibles en la Biblioteca estándar de C++.
La Biblioteca estándar de C++ proporciona una extensa colección de funciones
para realizar cálculos matemáticos comunes, manipulaciones de cadena,
manipulaciones de caracteres, entrada/salida, comprobación de errores y
muchas otras operaciones útiles. Esto facilita el trabajo del programador, ya que
estas funciones proporcionan muchas de las herramientas que necesita. Las
funciones de la Biblioteca estándar de C++ se proporcionan como parte del
entorno de programación de C++.
Las funciones (llamadas métodos o procedimientos) permiten al programador
modularizar un programa, al separar sus tareas en unidades autocontenidas. Ya ha
utilizado funciones en todos los programas que ha escrito. Algunas veces, estas
funciones se denominan funciones definidas por el usuario, o funciones definidas por el
programador. Las instrucciones en los cuerpos de las funciones se escriben sólo una
vez, y se pueden reutilizar desde varias ubicaciones en un programa; además están
ocultas de las demás funciones.
Hay varias razones para modularizar un programa con funciones. Una de ellas es la
metodología divide y vencerás, la cual facilita el proceso de desarrollo de programas al
construirlos a partir de piezas pequeñas y simples. Otra de ellas es la reutilización de
software: utilizar las funciones existentes como bloques de construcción para crear
nuevos programas.
Una pequeña función que realiza una tarea es más fácil de probar y depurar que una
función más grande que realiza muchas tareas.
tipo nombre(parámetros/argumentos){
funciones }
sentencias ;

Prototipo
Como sabemos, una función se invoca mediante una llamada, y
cuando la función a la que se llamó completa su tarea, devuelve
un resultado o simplemente devuelve el control a la función que
la llamó. Una analogía a esta estructura de un programa es la
forma jerárquica de la administración. Un jefe (similar a la
función que hace la llamada) pide a un trabajador (similar a la
función que se llamó) que realice una tarea y reporte (devuelva)
los resultados, después de completarla. La función jefe no sabe
cómo realiza la función trabajador sus tareas designadas. El
trabajador también podría llamar a otras funciones trabajador,
sin que el jefe supiera. Este ocultamiento de los detalles de
implementación promueve la buena ingeniería de software.
Relación jerárquica entre la función jefe y las funciones trabajador.
Funciones matemáticas de la biblioteca
La funciones globales, se colocan en
archivos de encabezado, de manera que
las funciones globales se puedan
reutilizar en cualquier programa que
incluya el archivo de encabezado y pueda
crear un enlace con el código objeto de la
función. Por ejemplo, pow del archivo
de encabezado <math.h> o <cmath>
para elevar un valor a una potencia.
Para C++ ya usaremos cmath
Funciones en línea
Es bueno implementar un programa como un conjunto de funciones desde el
punto de vista de la ingeniería de software, pero las llamadas a funciones
implican una sobrecarga en tiempo de ejecución. C++ cuenta con las funciones
en línea para ayudar a reducir la sobrecarga de las llamadas a funciones; en
especial para las funciones pequeñas. Al colocar el calificador inline antes del
tipo de valor de retorno de la función en su definición, se “aconseja” al compilador
para que genere una copia del código de la función en ese lugar (cuando sea
apropiado) para evitar la llamada a una función. La desventaja es que se insertan
múltiples copias del código de la función en el programa (lo cual aumenta su
tamaño) en vez de que haya una sola copia de la función, a la cual se le pasa el
control cada vez que se realiza una llamada. El compilador puede ignorar el califi
cador inline, y por lo general lo hace para todas las funciones, excepto las más
pequeñas.
Funciones con listas de parámetros vacías
En C++, una lista de parámetros vacía se especifica mediante void o nada entre
paréntesis. El prototipo
void imprimir();
especifica que la función imprimir no recibe argumentos y no devuelve un valor.

Los programas de C++ no se compilan, a menos que se proporcionen prototipos


de función para cada función, o que cada función se defina antes de llamarla.
Referencias y parámetros de referencias
Dos formas de pasar argumentos a las funciones en muchos lenguajes de
programación son el paso por valor y el paso por referencia. Cuando se pasa un
argumento por valor, se crea una copia del valor del argumento y se pasa (en la
pila de llamadas a funciones) a la función que se llamó. Las modificaciones a la
copia no afectan al valor de la variable original en la función que hizo la llamada.
Esto evita los efectos secundarios accidentales que tanto obstaculizan el
desarrollo de sistemas de software correctos y confiables.

El paso por referencia es bueno por cuestiones de rendimiento, ya que puede eliminar la sobrecarga de
copiar grandes cantidades de datos en el paso por valor.

El paso por referencia puede debilitar la seguridad, ya que la función a la que se llamó puede corromper
los datos de la función que hizo la llamada.
Argumentos predeterminados
Para un programa, es algo común el invocar una función repetidas veces con el
mismo valor de argumento para un parámetro específico. En tales casos, podemos
especificar que dicho parámetro tiene un argumento predeterminado; es decir,
que tiene un valor predeterminado que debe pasar a ese parámetro. Cuando un
programa omite un argumento para un parámetro con un argumento
predeterminado en la llamada a una función, el compilador vuelve a escribir la
llamada a la función e inserta el valor predeterminado del argumento.

Los argumentos predeterminados deben ser los argumentos de más a la derecha en la lista de parámetros
de una función. Al llamar a una función con dos o más argumentos predeterminados, si se omite un
argumento que no sea el de más a la derecha en la lista de argumentos, entonces también deben omitirse
todos los argumentos que estén a la derecha de ese argumento. Los argumentos predeterminados deben
especificarse con la primera ocurrencia del nombre de la función; por lo general, en el prototipo de la
función..
Sobrecarga de funciones
C++ permite definir varias funciones con el mismo nombre, siempre y cuando
éstas tengan distintas firmas. A esta capacidad se le conoce como sobrecarga de
funciones. Cuando se hace una llamada a una función sobrecargada, el compilador
de C++ selecciona la función apropiada al examinar el número, tipos y orden de
los argumentos en la llamada.
La sobrecarga de funciones se utiliza comúnmente para crear varias funciones con
el mismo nombre que realicen tareas similares, pero con distintos tipos de datos.
Por ejemplo, muchas funciones en la biblioteca de matemáticas están
sobrecargadas para distintos tipos de datos numéricos; el estándar de C++
requiere versiones sobrecargadas float, double y long double de las funciones
matemáticas
Al sobrecargar las funciones que realizan tareas estrechamente relacionadas, los programas pueden ser
más fáciles de leer y comprender.
Plantillas de funciones
Por lo general, las funciones sobrecargadas se utilizan para realizar operaciones
similares que involucren distintos tipos de lógica de programa en distintos tipos de
datos. Si la lógica del programa y las operaciones son idénticas para cada tipo
de datos, la sobrecarga se puede llevar a cabo de una forma más compacta y
conveniente, mediante el uso de plantillas de funciones. El programador escribe
una sola definición de plantilla de función. Dados los tipos de los argumentos que
se proporcionan en las llamadas a esta función, C++ genera de manera
automática especializaciones de plantilla de función separadas para manejar cada
tipo de llamada de manera apropiada. Por ende, al defi nir una sola plantilla de
función, en esencia se define toda una familia de funciones sobrecargadas.

template < class T > // o template< typename T >


Ejercicios
Función void / vacía
sin parámetros
sin retorno
Función con copia / paso por valor
Función con alias / paso por referencia
Sobrecarga de funciones
Plantilla / template
Resumen
La experiencia ha demostrado que la mejor forma de desarrollar y mantener un programa extenso es
construirlo a partir de piezas (o componentes) simples y pequeñas. A esta técnica se le conoce como divide y
vencerás.
Las funciones permiten al programador modularizar un programa, al separar sus tareas en unidades
autocontenidas.
Las instrucciones en los cuerpos de las funciones se escriben sólo una vez, se pueden reutilizar desde varias
ubicaciones en un programa; además están ocultas de las demás funciones.
Los prototipos para las funciones globales se colocan en archivos de encabezado, de manera que las funciones
globales se puedan reutilizar en cualquier programa que incluya el archivo de encabezado y pueda crear un
enlace con el código objeto de la función.
El compilador hace referencia al prototipo de función, para comprobar que las llamadas a una función tengan
el número y tipos de argumentos correctos, que los tipos de los argumentos estén en el orden correcto y que
el valor devuelto por la función se pueda utilizar de manera correcta en la expresión que llamó a la función.

También podría gustarte