Вы находитесь на странице: 1из 78

Lenguaje de Programación

Tema 5:
Programación Modular:
Funciones y Procedimientos

Profesor
John Ledgard Trujillo Trejo

Facultad de Ingeniería Electrónica y Eléctrica


Curso 2017-II
Índice del Capítulo

3.1 Introducción
3.2 Componentes de un Programa en C++
3.3 Funciones
- Funciones de la Biblioteca Matemática
- Definición de Funciones
- Prototipos de Funciones
3.4 Ficheros de Cabecera
3.5 Generación de Números Aleatorios
- Ejemplo: Un Juego de Azar. Introducción de enum
3.6 Almacenamiento y Ámbito de Variables
- Clases de Almacenamiento
- Reglas de Ámbito
3.7 Recursividad
- Ejemplo de Recursividad: La serie de Fibonacci
- Recursividad versus Iteración

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 1
Índice del Capítulo

Índice del Capítulo


3.8 Funciones con Lista de Parámetros Vacía
3.9 Funciones Inline
3.10 Referencias y Parámetros Referencia
3.11 Argumentos por Defecto
3.12 Operador Unario de Resolución de Ámbito
3.13 Sobrecarga de Funciones
3.14 Plantillas de Funciones

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 2
3.1 Introducción

 Técnica “Divide y vencerás”


 Construcción de programas a partir de componentes más
pequeños
 Cada pieza es más manejable que el programa original

 Este capítulo:
 describe características clave del lenguaje C++ que facilitan el
diseño, implementación, operación y mantenimiento de
programas grandes

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 3
3.2 Componentes de un Programa en C++

 Módulos: funciones y clases


 Programas usan módulos nuevos y propios del compilador
 Nuevos: funciones y clases definidas por el programador
 Ya definidos: de la biblioteca estándar

 Definición de funciones
 Sólo se escribe una vez el conjunto de sentencias que forman la
función
 Código oculto para otras funciones

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 4
3.2 Componentes de un Programa en C++

 Funciones invocadas por una llamada a función


 Nombre de la función e información (argumentos) que necesita

 Analogía relación Jefe-Trabajador


 Un jefe (función de llamada) pide a un trabajador (función
invocada) que realice una tarea y devuelva los resultados
cuando la finalice.

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 5
3.3 Funciones

 Motivos para dividir programa en funciones:


 Permiten al usuario modularizar un programa
 La aproximación “divide y vencerás” hace que el programa
sea más manejable
 Reutilización de Software
 Uso de funciones existentes como bloques de construcción
para escribir nuevos programas
 Evitar la repetición de código en un programa

 Variables Locales
 Conocidas sólo en la función en la que son definidas
 Todas las variables declaradas en las definiciones de
funciones son variables locales

 Parámetros
 Variables locales que se pasan cuando se llama a una
función
 Proporcionan información exterior
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 6
3.3.1 Funciones de la Biblioteca Matemática

 Realizan cálculos matemáticos comunes


 Incluir el fichero de cabecera <cmath>

 Las funciones se llaman escribiendo:


 nombreFuncion (argumento);
o
 nombreFuncion(argumento1, argumento2, …);

 Todas las funciones de la biblioteca matemática devuelven


un double
 Ejemplo
 Función sqrt (raíz cuadrada). Esta sentencia imprimirá 30:
cout << sqrt( 900.0 );

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 7
3.3.1 Funciones de la Biblioteca Matemática

 Los argumentos de la función pueden ser:


 Constantes
 sqrt( 4 );
 Variables
 sqrt( x );
 Expresiones
 sqrt( sqrt( x ) ) ;
 sqrt( 3 - 6x );

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 8
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 9
3.3.2 Definición de Funciones

 Prototipo de función
 Le dice al compilador el tipo del argumento y el tipo del valor
que devuelve la función
 int square( int );
 Función que recibe un int y devuelve un int
 Explicado con más detalle más adelante

 Llamar/Invocar una función


 square(x);
 Paréntesis: operador usado para llamar a una función
 Pasa x como argumento
 La función hace su propia copia de los argumentos
 Al finalizar, devuelve un resultado

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 10
3.3.2 Definición de Funciones

 Formato para definir una función


tipo-valor-devuelto nombre-función( lista-parámetros )
{
declaraciones y sentencias
}
 Lista de parámetros
 Lista de argumentos separados por comas
 Tipo de datos necesarios para cada argumento
 Si no hay argumentos, se pone void o se deja en blanco
 Tipo-valor-devuelto
 Tipo de datos del resultado que se devuelve (se usa void si
no se devuelve nada)

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 11
3.3.2 Definición de Funciones

 Ejemplo de función
int square( int y )
{
return y * y;
}
 Palabra clave return
 Devuelve datos, y el control vuelve a la función de llamada
 Si no hay datos que devolver, se usa return;
 La función finaliza cuando encuentra su llave derecha }
 El control vuelve a la función de llamada
 Las funciones no pueden definirse dentro de otras funciones
 A continuación: programas de ejemplo

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 12
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 13
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 14
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 15
3.3.3 Prototipos de Funciones

 El prototipo de una función le dice al compilador:


 Nombre de la función
 Parámetros (número, tipo de datos y orden)
 Tipo del valor devuelto (void si no devuelve nada)
 Sólo necesario si la definición de la función va después
de la función de llamada
 El compilador usa los prototipos de funciones para validar
las llamadas a funciones

 El prototipo debe ajustarse a la definición de la


función
 Prototipo de función
double maximo( double, double, double );
 Definición
double maximo( double x, double y, double z )
{

}
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 16
3.3.3 Prototipos de Funciones

 Firma de función
 Parte del prototipo con nombre y tipos parámetros (no incluye el
tipo del valor devuelto)
 double maximo( double, double, double );
Firma de la función

 Coacción de Argumentos
 Fuerza que los argumentos sean del tipo apropiado
 Conversión de int (4) a double (4.0)
cout << sqrt(4)
 Reglas de conversión
 Los argumentos suelen convertirse automáticamente
 Cambio de double a int puede truncar los datos
 3.4 to 3
 Promoción: de tipos mezclados al tipo mayor
 int * double

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 17
3.3.3 Prototipos de Funciones

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 18
3.4 Ficheros de Cabecera

 Los ficheros de cabecera contienen:


 Prototipos de funciones
 Definiciones de tipos de datos y constantes

 Ficheros de cabecera que terminan en .h


 Ficheros de cabecera definidos por el programador
#include "micabecera.h"

 Ficheros de cabecera de la biblioteca


#include <cmath>

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 19
3.5 Generación de Números Aleatorios

 Función rand (<cstdlib>)


 i = rand();
 Genera un entero sin signo entre 0 y RAND_MAX
(constante simbólica definida en el fichero de cabecera
cstdlib, cuyo valor es normalmente 32767, el máximo
valor positivo para un entero de 2 bytes)

 Escalado y desplazamiento
 Operador módulo (resto): %
 10 % 3 es 1
 x % y está entre 0 e y – 1
 Ejemplo: tiradas de un dado (6 caras)
i = rand() % 6 + 1;
 "rand() % 6" genera un número entre 0 y 5 (6=factor de
escalado)
 "+ 1" construye el rango de 1 a 6 (desplazamiento 1)
 A continuación:Lenguaje
programa para echar los dados
de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 20
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 21
3.5 Generación de Números Aleatorios

 A continuación:
 Programa para mostrar la distribución de rand()
 Simulación de 6000 tiradas de un dado
 Si volvemos a ejecutar el programa anterior, se vuelve a
imprimir la misma secuencia de números (¿aleatorio?: Sirve
para comprobar el funcionamiento de un programa)
 Cada entero del rango 1-6 debería aparecer aproximadamente
1000 veces

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 22
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 23
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 24
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 25
3.5 Generación de números aleatorios

 Llamar a rand() repetidamente


 Proporciona la misma secuencia de números

 Números pseudoaleatorios
 Secuencia prefijada de números “aleatorios”
 Cada vez que se ejecuta el programa, se genera la misma
secuencia
 Útil para depurar programas

 Para obtener diferentes secuencias aleatorias, una vez que


el programa está depurado
 Valor semilla
 Similar a un punto de inicio aleatorio en la secuencia
 La misma semilla producirá la misma secuencia
 srand(seed);
 <cstdlib>
 Usado antes de rand() para fijar la semilla

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 26
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 27
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 28
3.5 Generación de números aleatorios

 Usar la hora actual para fijar la semilla


 No hay necesidad de fijar la semilla cada vez explícitamente
 srand( time( 0 ) );
 time( 0 );
 <ctime>
 Devuelve la hora actual en segundos

 Escalado y desplazamiento generales


 Número = valorDesplazamiento + rand() % factorEscalado
 valorDesplazamiento = primer número del rango deseado
 factorEscalado = anchura del rango deseado

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 29
3.5.1 Ejemplo: Juego de Azar. Introducción de enum

 Enumeración
 Conjunto de enteros con identificadores
enum typeName {constant1, constant2…};
 Constantes comienzan en 0 (por defecto), con incrementos de 1
 Constantes necesitan nombres únicos
 No se puede asignar un entero a una variable de enumeración
 Se debe usar un tipo de enumeración previamente definido

 Ejemplo
enum Estado {CONTINUA, GANAS, PIERDES};
Estado varEnum;
varEnum = GANAS; // no se puede hacer varEnum = 1

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 30
3.5.1 Ejemplo: Juego de Azar. Introducción de enum

 Las constantes enumeradas pueden tener valores prefijados


enum Meses { ENE = 1, FEB, MAR, ABR, MAY, JUN,
JUL, AGO, SEP, OCT, NOV, DIC};
 Comienza en 1, con incrementos de 1

 A continuación: simulador de un juego de dados


 Se tiran dos dados
 7 o 11 en la primera tirada: el jugador gana
 2, 3, o 12 en la primera tirada: el jugador pierde
 4, 5, 6, 8, 9, 10
 El valor se transforma en los “puntos” del jugador
 El jugador gana si saca sus “puntos” antes de sacar un 7

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 31
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 32
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 33
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 34
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 35
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 36
3.6 Almacenamiento y ámbito de variables

 Las variables poseen atributos


 Hemos visto nombre, tipo, tamaño y valor
 Clase de almacenamiento
 Cuánto tiempo permanece la variable en memoria
 Ámbito
 Dónde puede ser referenciada la variable en un programa
 Conexión
 Para programas con múltiples ficheros, qué ficheros pueden
usarlas

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 37
3.6.1 Clases de Almacenamiento

 Clase de almacenamiento automática


 La variable se crea cuando el programa entra en su bloque
 La variable se destruye cuando el programa abandona su bloque
 Sólo pueden ser automáticas las variables locales y parámetros de
las funciones
 Autómaticas por defecto
 La palabra clave auto declara automática explícitamente
 Palabra clave register
 Indicación para situar la variable en un registro de alta
velocidad
 Se emplea para variables muy usadas (contadores de lazo)
 A menudo innecesarias, el compilador las optimiza
 Se especifican register or auto, no ambas
 register int counter = 1;

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 38
3.6.1 Clases de Almacenamiento

 Clase de almacenamiento estática


 Las variables existen para el programa completo
 En funciones, el nombre existe para todo el programa
 Pueden no ser accesibles, pues las reglas de ámbito aún se
aplican (ver siguiente apartado)
 Palabra clave static
 Variables locales de la función
 Mantiene los valores entre llamadas a la función
 Sólo conocidas en su propia función
 Palabra clave extern
 Clase por defecto para variables/funciones globales
 Globales: definidas fuera del bloque de la función
 Conocidas en cualquier función que venga después de ellas

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 39
3.6.2 Reglas de Ámbito

 Ámbito
 Parte del programa donde se puede utilizar un identificador

 Ámbito de fichero
 Identificador definido fuera de una función, conocido en todas
las funciones
 Variables globales, definición de funciones y prototipos

 Ámbito de función
 El identificador puede referenciarse dentro de la función que la
define
 Etiquetas: identificadores seguidos de dos puntos (case:)
 únicos identificadores con ámbito de función

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 40
3.6.2 Reglas de Ámbito

 Ámbito de bloque
 Comienza en la declaración y termina en llave derecha }
 Pueden referenciarse sólo en ese rango
 Variables locales, parámetros de función
 Variables static tienen ámbito de bloque, aunque existan
desde que el programa inicia su ejecución
 La duración del almacenamiento no afecta al ámbito de un
identificador
 Ámbito de prototipo de función
 Sólo la lista de parámetros del prototipo
 Nombres de parámetros opcionales en el prototipo
 El compilador los ignora
 En un prototipo, un nombre de parámetro sólo puede usarse
una vez

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 41
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 42
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 43
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 44
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 45
3.7 Recursividad

 Funciones recursivas
 Funciones que se llaman a sí mismas
 Pueden solucionar solamente un caso base

 Si no existe un caso base


 Dividimos el problema en problemas menores
 Ejecutamos una nueva copia de la función trabajando con el
problema menor (llamada recursiva/paso recursivo)
 Lentamente converge hacia el caso base
 La función realiza la llamada a sí misma dentro de la
sentencia return
 Al final, se resuelve el caso base
 Las respuestas viajan en sentido contrario, hasta resolver el
problema completo

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 46
3.7 Recursividad

 Ejemplo: factorial

n! = n * ( n – 1 ) * ( n – 2 ) * … * 1
 Relación recursiva ( n! = n * ( n – 1 )! )

5! = 5 * 4!
4! = 4 * 3!…
 Caso base (1! = 0! = 1)

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 47
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 48
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 49
3.7.1 Ejemplo de Recursividad: Serie de Fibonacci

 Serie de Fibonacci (espiral): 0, 1, 1, 2, 3, 5, 8...


 Cada número es la suma de los dos anteriores
 Ejemplo de fórmula recursiva:
 fib(n) = fib(n-1) + fib(n-2)

 Código C++ para la función de Fibonacci:


long fibonacci( long n )
{
if ( n == 0 || n == 1 ) // caso base
return n;
else
return fibonacci( n - 1 ) + fibonacci( n – 2 );
}

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 50
3.7.1 Ejemplo de Recursividad: Serie de Fibonacci

f( 3 )

return f( 2 ) + f( 1 )

return f( 1 ) + f( 0 ) return 1

return 1 return 0

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 51
3.7.1 Ejemplo de Recursividad: Serie de Fibonacci

 Orden de las operaciones


 return fibonacci( n - 1 ) + fibonacci( n - 2 );

 No sabemos cuál se ejecuta primero


 C++ no lo especifica
 Sólo && , || y ?: garantizan la evaluación de izquierda a
derecha

 Llamadas a funciones recursivas


 Cada nivel de recursividad dobla el número de llamadas a la
función
 Número 30th = 2^30 ~ 4 billones de llamadas a la función
 Complejidad exponencial

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 52
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 53
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 54
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 55
3.7.2 Recursividad versus Iteración

 Repetición
 Iteración: lazo explícito
 Recursividad: llamadas reiteradas a la función

 Terminación
 Iteración: falla la condición del lazo
 Recursividad: se llega al caso base

 Ambos pueden tener lazos infinitos


 Compromiso entre efectividad (tiempo de computación y
consumo de memoria) (iteración) y buena ingeniería de
software (recursividad)

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 56
3.8 Funciones con Lista de Parámetros Vacía

 Listas de parámetros vacías


 void o dejar la lista vacía
 Indica que la función no toma argumentos
 La función print no toma argumentos y no devuelve valores
 void print();
 void print( void );

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 57
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 58
3.9 Funciones Inline

 Funciones inline
 Palabra clave inline antes de la función
 Hace que el compilador copie el código en el programa en vez
de hacer una llamada a la función
 Reduce el consumo en llamadas a funciones
 El compilador puede ignorar inline
 Útil para funciones pequeñas muy usadas

 Ejemplo
inline double cube( const double s )
{ return s * s * s; }

 const le dice al compilador que la función no modifica s

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 59
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 60
3.10 Referencias y Parámetros Referencia

 Llamada por valor


 Una copia de los datos se pasa a la función
 Los cambios en la copia no cambian el original
 Previene efectos colaterales no deseados

 Llamada por referencia


 La función puede acceder a los datos directamente
 Los cambios afectan al original

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 61
3.10 Referencias y Parámetros Referencia

 Parámetro referencia
 Alias para su argumento correspondiente en una llamada a
función
 Pasa el parámetro por referencia
 Para indicarlo, se usa & después del tipo de dato en el prototipo
 void miFuncion( int &dato );
 Se lee “dato es una referencia a un int”
 El formato de llamada a la función es el mismo
 miFuncion( a );
 Sin embargo, el original puede ser modificado

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 62
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 63
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 64
3.10 Referencias y Parámetros Referencia

 Punteros (capítulo 5)
 Otra forma de paso por referencia
 Referencias como alias para otras variables
 Se refieren a la misma variable
 Pueden usarse dentro de una función
int contador = 1; // declara la variable entera contador
int &cRef = contador; // crea cRef como un alias para
contador
++cRef; // incrementa contador (usando su alias)

 Las variables referencia deben ser inicializadas cuando se


declaran, y no pueden ser reasignadas como alias de otras
variables
 Si no se hace, se produce un error de compilación
 Referencia colgada
 Referencia a una variable no definida

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 65
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 66
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 67
3.11 Argumentos por defecto

 Llamada a función omitiendo parámetros


 Si no ponemos suficientes parámetros, a los que van más a la
derecha se les asigna su valor por defecto
 Valores por defecto
 Pueden ser constantes, variables globales, o llamadas a
funciones
 Fijar los valores por defecto en el prototipo de la función
int miFuncion( int x = 1, int y = 2, int z = 3 );
 miFuncion(3)
 x = 3, y y z toman los valores por defecto (pues están más
a la derecha)
 miFuncion(3, 5)
 x = 3, y = 5 y z toma su valor por defecto

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 68
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 69
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 70
3.12 Operador Unario de Resolución de Ámbito

 Operador unario de resolución de ámbito (::)


 Accedemos a la variable global si existe una variable local con
el mismo nombre
 No necesario si los nombres de las variables son distintos
 Uso ::variable
 y = ::x + 3;
 Bueno para evitar el uso de los mismos nombres para las
variables locales y globales

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 71
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 72
3.13 Sobrecarga de Funciones

 Sobrecarga de funciones
 Funciones con el mismo nombre y distintos parámetros
 Realizan tareas similares
 Ejemplo: función para calcular el cuadrado de ints y de floats
int cuadrado( int x) {return x * x;}
float cuadrado(float x) { return x * x; }

 Funciones sobrecargadas se distinguen por la FIRMA.


 Basadas en nombre y tipo de parámetros (el orden importa)
 Deformación o decoración de nombres:
 El compilador codifica el identificador de la función con el nº y tipo
de sus parámetros para habilitar:
 Enlace con comprobación de tipos:
 Asegura que se llama a la función sobrecargada apropiada

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 73
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 74
Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017 75
Bibliografía

 J OYANES AGUILAR, Luis. 2003. FUNDAMENTOS DE


PROGRAMACIÓN Algoritmos, Estructura de Datos y Objetos.
McGraw-Hill, Madrid.

 DEITEL H., Deitel P. 2008. C++ Como programar. 6a Ed. Pearson.


Prentice-Hall. México. 1112 p.

Lenguaje de Programación
John Ledgard Trujillo Trejo
03 de noviembre de 2017
¿ Preguntas ?

1.77

Вам также может понравиться