Diferencia entre revisiones de «Programación en C++/Funciones»

Contenido eliminado Contenido añadido
m Revertidos los cambios de 189.158.177.240 (disc.) a la última edición de Esteban16
Etiqueta: Reversión
Ajustes menores
 
Línea 38:
'''Parámetros por valor'''
 
La función '''cuadrado()''' (ver arriba) es un clásico ejemplo que muestra el paso de parámetros por valor, en ese sentido la función cuadrado() recibe una copia del parámetro '''n'''. En la misma función se puede observar que se realiza un calculocálculo ( '''n*n''' ), sin embargo el parámetro original no sufrirá cambio alguno, esto seguirá siendo cierto aún cuando dentro de la función hubiera una instrucción parecida a '''n = n * n;''' o '''n*=n;'''.
 
'''Parámetros por referencia'''
Línea 64:
 
== Funciones void ==
Bajo ciertas circunstancias se deseará escribir funciones que no regresen valor alguno (esto sería algo parecido a escribir procedures en Pascal) y para ello podemos declarar a la función como '''void'''. La palabra reservada void es utilizada para declarar funciones sin valor de retorno y también para indicar que una función específica no requiere de parámetros. Por ejemplo, la función pausa() que se verá en seguidaenseguida, no devolverá valor alguno y la misma no requiere de parámetros.
<source lang="cpp">
// esta función requiere de la librería iostream
Línea 74:
}</source>;
 
'''Notas:''' se debe de aclarar que el uso de la palabra '''void''' dentro de los parentesisparéntesis es opcional al momento de declarar una función. Así, la función '''pausa()''' podría haberse declarado como '''void pausa()''', y la misma puede invocarse como: pausa();.
 
== Funciones anidadas ==
A diferencia de '''Pascal''', el lenguaje C, C++ no permite anidar funciones, sin embargo, dentro de una funcíonfunción puede existir la llamada a una o más funciones declaradas previamente, que determinara en cierto punto un resultado para que sea ejecutado cuando el programador lo desee.
 
== Funciones de tipo puntero (*) ==
En muchas ocasiones se desea que ciertas funciones regresen una referencia o puntero hacia un tipo (sea este estructurado o no) específico de dato en lugar de un valor específico. En tales casos, la función se deberá declarar como para que regrese un puntero. Por ejemplo, supongamos que deseamos crear una función para convertir un número entero en notación decimal a una cadena de caracteres en forma de números binarios, luego, la función mencionada podría escribirse para que reciba el número entero como parámetro y regrese un puntero a una cadena de caracteres conteniendo la conversión. Para ser más puntuales, vamos a escribir un programa en donde se verá la función '''binstr()''', y cuyo objetivo será precisamente convertir números decimales en cadenas binarias.
<div style="background:#FFFFBB; padding:16px; border-color:#0000FF; border-style:"solid">
Nota: observe que en la sintaxis para declarar funciones tipo puntero se debe de poner el símbolo '''*''' despuesdespués del tipo y antes del nombre de la función que se está declarando. Esto se puede ver en el programa, ya que la función binstr se declara como: '''char *binstr(unsigned int);'''</div>
 
<source lang="cpp">
Línea 124:
 
== Variables estáticas y automáticas ==
Dentro de una función, las variables y/o constantes pueden ser declaradas como: '''auto''' (por omisión) o como '''static'''. Si una variable dentro de una función es declarada como estática significa que la misma retendrá su valor entre las llamadas a la función. Por otro lado, la variables automáticas pierden su valor entre las llamadas. En el programa anterior puede verse que el arreglo de caracteres (buffer[65]) se ha declarado como estático para garantizar que dicho buffer retenga los datos aún despuesdespués de que la función termine. En el mismo ejemplo, si el buffer no se declara como estático, el contenido del mismo podría ser destruido al salir de la función y los resultados obtenidos podrían ser no deseados.
== Parámetros constantes ==
Los parámetros usados por una función pueden declararse como constantes ( '''const''' ) al momento de la declaración de la función. Un parámetro que ha sido declarado como constante significa que la función no podrá cambiar el valor del mismo ( sin importar si dicho parámetro se recibe por valor o por referencia ).
Línea 147:
'''Nota:'''
Ya que la función servirá para convertir números a cualquier representación la nombraremos como '''numstr()''' en lugar de binstr().
Si la función es invocada sin el parámetro base regresará una cadena de digitosdígitos decimales.
<source lang="cpp">
#include <iostream>
Línea 182:
 
== Parámetros estructurados ==
Al igual que cualquier otro tipo los parámetros de tipo estruturadoestructurado pueden pasarse por valor o por referencia, sin embargo, podría ser que si una estructura es pasada por valor el compilador mostrara una advertencia ( warning ) indicando que se pasado por valor una estructura, puesto que el paso de estructuras por valor es permitido usted puede ignorar la advertencia, pero lo mejor es pasar estructuras por referencia. Si una estructura es pasada por valor y si esta es muy grande podriapodría ser que se agotara la memoria en el segmento de pila ( Stack Segment ), aparte de que la llamada a la función sería más lenta.
 
Para ver un ejemplo, consideremos el caso del siguiente tipo estructurado: