Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en...
-
Upload
lita-zegarra -
Category
Documents
-
view
213 -
download
0
Transcript of Computación II Unidad IV Funciones y Módulos. Objetivos: –Comprender como construir programas en...
Computación II
Unidad IV
Funciones y Módulos
• Objetivos:– Comprender como construir programas en
forma modular partiendo de pequeñas partes conocidas como funciones.
– Ser capaces de crear funciones nuevas.– Comprender los mecanismos utilizados para
pasar información de función a función.– Saber usar las funciones inline y sus
ventajas.– Ser capaces de sobrecargar funciones.
Presentación de la unidad:
• Contenidos:– Funciones – definición.– Prototipo de funciones.– Parámetros de una función.– Clases de almacenamiento.– Ámbito– Función inline.– Sobrecarga de funciones– Plantillas de función.
Presentación de la unidad:
Funciones - definición• Conjunto de sentencias con un nombre en común, que pueden
llamarse desde cualquier parte del programa.• Los programas en C++ se escriben combinando funciones que el
programador escribe con funciones preempacadas.• Estructura:
<tipo_de_retorno> nombreFuncion (<lista _parametros>){cuerpo_de_funcion;return <expresion>;
}• Ejemplo:
float fProducto(float nro1, float nro2){float prod = 0.0;prod = nro1*nro2;return pro;
}
• Cada función debería limitarse a ejecutar una tarea sencilla y bien definida.
• El nombre de la función debe expresar en forma clara la tarea que ejecuta. Es un identificador válido.
int fCuadrado(int x){return x*x;
}
• El cuerpo de la función esta formado por las declaraciones de variables junto con enunciados. Es también conocido como bloque.
• Error: definir una función dentro de otra.
Funciones - definición
Prototipo de funciones
• C++ requiere que una función se defina o que se declare antes de su uso.
• El compilador utiliza los prototipos para verificar las llamadas de función.
• Le indica al compilador el tipo de datos requeridos por la función, el numero de parámetros que la función espera recibir, y el orden en el cual se esperan dichos parámetros.
• Los nombres de los parámetros se suelen incluir por razones de documentación. El compilador ignora esos nombres.
float fProducto(float, float);
• Coerción de argumentos: obligar a los argumentos al tipo apropiado.
• Reglas de promoción: definen como deben ser convertidos los tipos de datos a otros tipos, sin perder datos.
• Las regla son aplicadas automáticamente. La conversión de valores a tipos inferiores por lo regular resulta en un valor incorrecto.
int fProducto (int x, int y){return x*y;}int main(){
float a, b;cout<<fProducto(a, b);return 0;
}
• Error de sintaxis: olvidar un prototipo de función si la definición de la función aparece después de la llamada de la función dentro del programa.
Prototipo de funciones
Parámetros de una función
• Los parámetros de una función son variables locales.
• C++ proporciona dos métodos para pasar variables (parámetros) de una función a otra.– Por valor (paso por copia): la función receptora no
puede modificar el valor del parámetros pasado.– Por referencia (o dirección): la función modifica el
valor del parámetro pasado y devuelve el valor modificado a la función llamadora.
Cuando se modifica el valor de un parámetro pasado por referencia, el valor queda almacenado en la misma dirección de memoria.
Parámetros de una función
Por valor Por referenciavoid fPorValor(int y){
y++;
cout<<y<<endl;
}
int main(){
int x = 6;
fPorValor(x);
cout<<x<<endl;
return 0;
}
void fReferencia(int &y){
y +=2;
}
int main(){
int x = 20;
fReferencia(x);
cout<<x<<endl;
return 0;
}
• Por referencia – C – uso de punteros: void fIntercambio (int *x, int *y){
int aux;aux = *x;*x = *y;*y = aux;
}int main(){
int a, b;fIntercambio(&a, &b);return 0;
}
Parámetros de una función
• Parámetros const: parámetros de sólo lectura en el interior de la función. void fRecorrerArray( arr[], const int tama);
• Argumentos por omisión o defecto:– Se pueden asignar valores por defecto a los
parámetros de una función.– El valor por defecto debe ser siempre una expresión
constante.– En la llamada a la función se deben incluir todas las
variables desde la izquierda hasta el primer parámetro omitido.
Parámetros de una función
• Argumentos por omisión o defecto:– Los argumentos por defecto deben pasar por valor.– Los valores de los argumentos por defecto pueden
ser valores literales o definiciones constantes.– Todos los argumentos por defecto deben colocarse al
final del prototipo de la función.
void asteriscos(int fila, int columna=3, char c = ‘*’);
Desde el main: asteriscos(4);asteriscos(4,6);asteriscos(4,6,’@’)
Parámetros de una función
Funciones en línea (inline)
• Reducen la sobrecarga por llamadas de función; especial para pequeñas funciones.
• “inline” aconseja al compilador que genere una copia del código de la función “in situ”, cuando sea apropiado, a fin de evitar una llamada a función.
• Usar funciones inline puede reducir el tiempo de ejecución, pero puede aumentar el tamaño del programa.
• Sintaxis:inline tipo_de_retorno nombreF(lista_de_parametros){ cuerpo}
inline float cuadrado (float x){return x*x;}
• Las macro de procesador son un tipo de función inline definidas en una directiva de procesador #define
• El procesador no evalúa las expresiones incluidas como argumento en una macro; solo reemplaza cada instancia del nombre del argumento.
• Sintaxis:#define nombreM (parámetro)(expresión)#define cuadrado(x) (x)*(x)
• Los argumentos de las funciones en línea se evalúan antes de ser pasados a la función.
Funciones en línea (inline)
• Nombre• Tipo de dato• Valor• Duración almacenamiento:
– Período durante el cual una variable existe en memoria.• Clase de almacenamiento:
– Ayuda a determinar la duración del almacenamiento, el alcance y el enlace.
• Alcance: – Es desde donde puede ser referenciada una variable.
• Enlace: – Determina para un programa de varios archivos fuente, si una variable
es conocida solo en el archivo en el que actúa o en cualquier archivo fuente.
Atributos de una variable
Clases de almacenamiento
Clases de almacenamiento:
(persistencia)
automática
estática
auto
register
extern
static
•Solo las variables pueden tener persistencia automática.
•Variables que existen en el ámbito de un bloque.
•La palabra reservada “auto” declara en forma explícita a las variables de persistencia automática; por omisión, las variables locales tienen persistencia automática.
auto tipo_de_dato nombreVariable;
auto int x;
• “register” sugiere al compilador que conserve la variable en uno de los registros del hardware. Usado para variables de tipo contador, evita la sobrecarga de memoria.
register tipo_de_dato nombreVariable;register int count=1;
• Los identificadores de persistencia estática existen a partir del momento en el cual el programa inicia su ejecución.
• “static” usado para identificadores externos (variables globales y nombres de función) y para variables locales.
• Las variables locales declaradas como static son conocidas solo para la función para la cual fueron definidas, pero conservan su valor cuando sale de la función para la próxima vez que esa función sea llamada.
• Las variables locales y los nombres de función por omisión son “extern”
Clases de almacenamiento
Ámbito o alcance
• El alcance de un identificador es la porción de programa en la cual dicho identificador puede ser referenciado.
• Los alcances posibles son:– Alcance de función– Alcance de archivo– Alcance de bloque– Alcance de prototipo de función– Alcance de programa
• Las variables que tienen ámbito de programa pueden ser referenciados por cualquier función dentro del programa (variables globales)
• La variable declarada fuera de cualquier función y cuya declaración contiene la palabra static tiene ámbito de archivo.
• Las variables locales tienen ámbito de función.• Las variables declaradas en un bloque tienen ámbito de
bloque y no son visibles fuera del bloque.• Los únicos identificadores con alcance de prototipo de
función son aquellos utilizados en la lista de parámetros de un prototipo de función.
Ámbito o alcance
Sobrecarga de Funciones
• C++ permite que sean definidas varias funciones con el mismo nombre, siempre que estos nombres de funciones indiquen diferentes conjuntos de parámetros.
• La homónima de función se utiliza para funciones que ejecutan tareas similares sobre diferentes tipos de datos.
• Se pueden distinguir las funciones homónimas mediante su firma, combinación del nombre de la función y de sus tipos de parámetros.
• Las funciones homónimas no necesariamente tienen el mismo numero de parámetros.
int cuadrado(int x){return x*x;}double cuadrado(double y){return y*y;}
Plantillas de Función
• Permiten la creación de funciones que ejecutan las mismas operaciones sobre distintos tipos de datos; a diferencia de la sobrecarga de funciones, solo se define una vez.
• Todas las definiciones de plantilla de función empiezan con la palabra reservada “template” seguida por una lista de parámetros formales a la plantilla. Cada parámetro formal es precedido por class.
template <class T>void printArray(T *arrayA, const int contador){
for (int i = 0; i<= contaor; i++)cout<<arrayA[i];
}