2. Introducción
Años 50s
Lenguaje Lenguaje
Ensamblador FORTRAN
Código espaguetti
en programas de
miles de líneas
Programas pequeños
Años 60s y 70s
Programas estructurados: se basan en
estructuras de control (secuencia,
Programación condicional e iteración), uso mínimo de
estructurada GOTO y subrutinas independientes que
soportan recursividad y variables locales,
Programas mayores e.g. Algol y Pascal
de 50,000 líneas Abel Federico Pérez Hernández 2
3. Programación Orientada a Objetos
(POO)
Objetivo: permitir al desarrollador realizar programas
más fáciles de escribir, de mantener y de reutilizar.
Expresa un programa en términos de un conjunto de
objetos que colaboran entre si para realizar tareas.
o3
o1 Calcular
o1 media
o2
Programa Abel Federico Pérez Hernández 3
4. Programación Orientada a Objetos
(POO)
La POO es una evolución de la PE que plasma en el
diseño de una familia de lenguajes conceptos que existían
previamente con algunos nuevos.
La POO se basa en lenguajes que soportan sintáctica y
semánticamente la unión entre tipos de datos abstractos y
sus operaciones (clase).
La POO incorpora en su entorno de ejecución mecanismo
como el polimorfismo y el envío de mensajes entre
objetos.
Abel Federico Pérez Hernández 4
5. Programación Orientada a Objetos
(POO)
Un objeto está formado de datos y
procedimientos relacionados.
El programador piensa en términos de objetos.
Primero definen objetos para luego enviarles
mensajes solicitándoles que ejecuten sus
métodos por si mismos.
Abel Federico Pérez Hernández 5
6. Conceptos de la POO
Objeto: entidad provista de:
estado, i.e. propiedades externas e internas
comportamiento, i.e. métodos
identidad, i.e. propiedad que lo diferencía del
resto
Clase: definiciones del estado y del comportamiento de un
tipo de objeto concreto.
Instanciación: lectura de las definiciones de una clase y la
creación de un objetoAbel Federico Pérezde ellas.
a partir Hernández 6
7. Conceptos de la POO
Método: algoritmo asociado a un objeto (o clase de
objetos), cuya ejecución se desencadena tras la
recepción de un mensaje.
Un mensaje puede producir:
Un cambio en las propiedades del objeto o
La generación de un nuevo mensaje que será
enviado a otro objeto
Mensaje: una comunicación dirigida a un objeto que le
ordena que ejecute uno de sus métodos.
Abel Federico Pérez Hernández 7
8. Conceptos de la POO
Propiedad externa: contenedor de un tipo de datos
asociado a un objeto (o clase de objetos):
Permite que los datos sean visibles desde el exterior
del objeto
Su valor puede ser alterado por algún método
Propiedad interna: estado invisible de los objetos, que
únicamente puede ser accedido por un método del
objeto.
Abel Federico Pérez Hernández 8
9. Mecanismo de encapsulación
Definición: permite reunir todos los elementos que
pueden considerarse pertenecientes a una misma
entidad, al mismo nivel de abstracción
nombre_Alumno Alumno Curso
curp
dirección nombre nombre
teléfono curp calificación
nombre_Curso dirección …
calificación teléfono
… …
Aumenta la cohesión de los componentes de sistema
Suele ser confundido con el principio de ocultamiento
Abel Federico Pérez Hernández 9
10. Principio de ocultamiento
Definición: mecanismo que protege datos y métodos
contra cualquier interferencia o mal uso.
Interfaz
propiedades
Empaquetamiento
mediante un LOO Objeto
métodos
Privados: sólo los conoce y son accesibles por otra parte del
objeto, i.e. una parte del programa que esta fuera del objeto
no puede accederlos.
Públicos: otras partes del programa pueden accederlos… se
utilizan para ofrecer una interfaz controlada a las partes
privadas del objeto. Abel Federico Pérez Hernández 10
11. Ejemplo: bibliotecas “stdio.h” y “math.h”
Encapsulación:
Stdio contiene los prototipos de las funciones y tipos
para manipular datos de entrada y salida.
Math contiene los prototipos de las funciones y
definiciones para el uso y manipulación de funciones
matemáticas.
Ocultamiento:
Si se utiliza una función de biblioteca, e.g. printf() o
cos(), se utiliza una rutina de caja negra cuya parte
interna no se puede modificar.
Se crean e inicializan diversas variables privadas
(ocultas e inaccesibles). Hernández
Abel Federico Pérez 11
12. Polimorfismo
Definición: cualidad que permite que un nombre se use
para varios propósitos relacionados, pero técnicamente
diferentes.
En POO, el polimorfismo permite usar un nombre para
especificar una clase general de acciones.
C++
Tipo de dato
Clase general Acción
de acciones específica
Abel Federico Pérez Hernández 12
13. Ejemplo de la vida diaria
Volante de un automovil funciona igual si utilizamos:
Dirección mecánica
Dirección asistida
Dirección hidráulica
…
Diferentes
mecanismos
de dirección
Misma interfaz Abel Federico Pérez Hernández 13
14. Polimorfismo aplicado a funciones
Contra ejemplo: el cálculo del valor absoluto en C
requiere tres funciones, abs(), labs() y fabs(), para
entero, entero largo y valor real, respectivamente.
Ejemplo: C++ define la función abs() donde el tipo de
dato (e.g. entero, largo o real) utilizado para llamar la
función determina que versión específica se utiliza.
o Implementación de abs()
enter
entero largo
abs() Implementación de labs()
real
Interfaz genérica Implementación de fabs()
Abel Federico Pérez Hernández 14
(multi-métodos)
15. Polimorfismo aplicado a funciones
Ventajas:
Ayuda a reducir la complejidad permitiendo que
la misma interfaz se utilice para especificar una
clase general de acción.
El compilador selecciona la acción específica
(implementación) que se aplica a cada
situación.
Abel Federico Pérez Hernández 15
16. Polimorfismo aplicado a operadores
aritméticos
La mayoría de los lenguajes de programación proveen
una aplicacion limitada del polimorfismo de operadores
aritméticos:
e.g. en lenguaje C, el signo + se utiliza para
añadir enteros, enteros largos, caracteres y
reales.
El compilador automáticamente sabe que tipo de
aritmética debe aplicar.
En C++, se puede aplicar este concepto a otros tipos de
datos definidos por el usuario.
Abel Federico Pérez Hernández 16
17. Ejemplo de una lista
Substituir objetos con
cliente Lista interfaces idénticas en tiempo
… insert(i) de ejecución.
extract(i) Simplificar la definición del
cliente.
Desacoplar objetos entre si.
Pila Implementación Cola Implementación
LIFO FIFO
insert(i) insert(i)
extract(i) extract(i)
• Mismos tipos de datos
• Aplicación sobre un conjunto de métodos
Abel Federico Pérez Hernández 17
18. Herencia
Definición: proceso mediante el cual un objeto puede
adquirir las propiedades de otro.
Permite que un objeto soporte el concepto de
clasificación jerárquica:
General
+
Obra-hombre
es parte de Estructura
Edificio
Casa
-
Abel Federico Pérez Hernández 18
19. Herencia
En cualquier caso, la clase hija hereda todas las
cualidades asociadas con la clase padre y le añade sus
propias características definitorias.
Organismos
vivos
es parte de Plantas
Vegetales
Apio
Sin el uso de clasificaciones jerárquicas cada objeto
tendría que definir todas las características que se
relacionan con él explícitamente.
Abel Federico Pérez Hernández 19
20. Lenguajes Orientados a Objetos
Action Script 3 Lexico (en castellano)
Ada Objetive-C
C++ Ocaml
C# Oz
VB.NET Perl
Visual FoxPro PHP (versión 5)
Clarion PowerBuilder
Builder C++ Python
Delphi Ruby
Harbour Smalltalk
Eiffel Magik (SmallWorld)
Java
Abel Federico Pérez Hernández 20
21. E/S en C++
Es posible utilizar las funciones printf() y scanf(), pero C++ ofrece
un método nuevo y mejor:
Operador de salida <<
Operador de entrada >>
Nota: en C y C++ << y >> también son operadores de
desplazamiento (SOBRECARGA DE OPERADORES)
Ejemplos de salida con <<:
cout << expression;
Flujo predefinido que se enlaza automáticamente con el
dispositivo de salida (pantalla) en tiempo de ejecución
Abel Federico Pérez Hernández 21
22. E/S en C++
Ejemplos de <<: permite mostrar cualquier tipo básico de
C++
cout << “Muestra esta cadena en pantallan”;
cout << 100.99;
Ejemplos de >>: permite introducir cualquier tipo básico
de C++ desde el teclado
cin >> variable;
int num;
cin >> num;
Abel Federico Pérez Hernández 22
23. Ejemplo #1: muestra una cadena, dos enteros y
un real doble
#include <iostream.h> //Operadores de E/S
main()
{
int i, j; double d;
i=10; j=20; d=99.101;
cout << “Estos son algunos valores: ”
cout << i; cout << ‘ ‘;
cout << j; cout << ‘ ‘;
cout << d;
return 0; /*devolver un valor conocido al
proceso de llamada (SO) en vez de un
valor indefinido */
} Abel Federico Pérez Hernández 23
24. Ejemplo #2: mejora del ejemplo precedente
#include <iostream.h>
main()
{
int i, j; double d;
i=10; j=20; d=99.101;
cout << “Estos son algunos valores: ”
/* Muestra más de un valor en una sola
expresión de E/S */
cout << i << ‘ ‘ << j << ‘ ‘ << d;
return 0;
}
Abel Federico Pérez Hernández 24
25. Ejemplo #3: pide un valor entero
#include <iostream.h>
main()
{
int i;
cout << “Introduzca un valor: ”;
cin >> i;
cout << “Este es su número: ” << i <<
“n”;
return 0;
}
Abel Federico Pérez Hernández 25
26. Ejemplo #4: pide un entero, un real y una
cadena en una sola sentencia de entrada
#include <iostream.h>
main()
{
int i; float f; char s[80];
cout << “Introduzca un entero, un real
y una cadena: ”;
cin >> i >> f >> s;
cout << “Estos son sus datos: ”;
cout << i << ‘ ‘ << f << ‘ ‘ << s;
return 0;
}
Abel Federico Pérez Hernández 26
27. Salida del ejemplo #4
Los elementos de datos individuales pueden separarse
mediante: espacios en blanco, tabuladores y caracteres de
nueva línea
Entrada del programa:
10 100.12 Esto es una prueba
Lectura de una cadena: la entrada se detendrá cuando se lea
el primer espacio en blanco
Salida del programa:
10 100.12 Esto
Nota: el resto de la cadena queda en un búfer de entrada
esperando una operación posterior
¿Cuál es la salida?
Abel Federico Pérez Hernández 27
28. Salida del ejemplo #4
Los elementos de datos individuales pueden separarse
mediante: espacios en blanco, tabuladores y caracteres
de nueva línea
Entrada del programa:
10 100.12 Esto es una prueba [ENTER]
Lectura de una cadena: la entrada se detendrá cuando
se lea el primer espacio en blanco
Salida del programa:
10 100.12 Esto
Nota: el resto de la cadena queda en un búfer de
entrada esperando una operación posterior
Abel Federico Pérez Hernández 28
29. Ejemplo #5: efecto de la entrada con buffer de
línea
#include <iostream.h>
main()
{
char ch;
/* Por omisión, toda entrada es con búfer de
línea, i.e. no se pasa ninguna información al
programa C++ hasta que se pulsa ENTER */
cout << “Introduzca teclas, x para parar: n”;
do {
cout << “: ”;
cin >> ch;
} while (ch != ‘x’);
return 0;
}
Abel Federico Pérez Hernández 29
30. Comentarios en C++
C++ propone dos formas diferentes de hacer
comentarios:
Forma #1: es posible crear comentarios en varias
líneas
/* comentario
…
*/
Forma #2: sólo es posible hacer comentarios de una
línea
// comentario [retorno de carro y avance de línea]
Abel Federico Pérez Hernández 30
31. Ejemplo #1: combinación de comentarios en
estilos C y C++
/* Este es un comentario al estilo de C. Este
programa determina si un entero es par o impar
*/
#include <iostream.h>
main () {
int num; //comentario de una línea en C++
//leer el número
cout << “Introduzca el número a probar: “;
cin >> num;
//ver si es par o impar
if((num%2)==0) cout << “El número es parn”;
else cout << “El número es imparn”;
return 0;
} Abel Federico Pérez Hernández 31
32. Ejemplo #2: anidamiento de comentarios
Los comentarios al estilo de C NO se pueden
anidar:
/* comentario
/* comentario …
*/
*/
Es posible anidar un comentario de una sola
línea de C++ dentro de un comentario de
varias líneas de C:
/* Este es un comentario de varias líneas en el
cuál // se anidó un comentario de una línea
Aquí termina el comentario de varias líneas
*/ Abel Federico Pérez Hernández 32
33. Clases
Definición: mecanismo para crear objetos
Declaración
class nombre-clase {
funciones y variables privadas
public: Miembros
de la clase
funciones y variables públicas
} lista de objetos;
La lista de objetos es opcional
nombre-clase es un nuevo nombre de tipo que se utiliza
para declarar objetos
Abel Federico Pérez Hernández 33
34. Clases
Por omisión, todas las funciones y
variables declaradas en una clase
son privadas
class nombre-clase {
Accesibles por
funciones y variables privadas otros miembros de
esta clase
public:
Accesibles por
funciones y variables públicas
otros miembros de
} lista de objetos; esta clase y por
cualquier otra
parte del
programa que
contenga la clase
Abel Federico Pérez Hernández 34
35. Ejemplo de declaración de una clase
en C++
class myclass {
//privado para myclass
int a;
public:
void set_a(int num);
int get_a();
};
Solo los miembros set_a(int num) y get_a() pueden acceder a la
variable a
Los miembros set_a(int num) y get_a() pueden ser accedidos por
cualquier parte del programa
Abel Federico Pérez Hernández 35
36. Definición de funciones miembro
Operador de resolución del ámbito
(asociación)
tipo nombre-clase::nombre-func(lista-parámetros)
{
...//cuerpo de la función
}
Abel Federico Pérez Hernández 36
37. Ejemplo de definición de funciones
miembro
/* set_a() y get_a() (públicos) pueden
acceder directamente a a (privado) porque
son miembros de myclass */
void myclass::set_a(int num) {
a = num;
}
int myclass::get_a() {
return a;
} Abel Federico Pérez Hernández 37
38. Declaración de objetos
La declaración de myclass no definió ningún objeto, sólo definió un
tipo:
class myclass {
//privado para myclass
int a;
public:
void set_a(int num);
int get_a();
};
Para crear un objeto, se utiliza el nombre de clase como
especificador de tipo:
myclass ob1, ob2; //objetos de tipo myclass
Abel Federico Pérez Hernández 38
39. Diferencia entre declaración de clases
y declaración de objetos
Declaración de clase es una abstracción lógica que define un
nuevo tipo que determina cómo será un objeto de ese tipo.
Declaración de un objeto crea una entidad física de ese tipo.
Myclass myclass
a ocupa
set_a(int num)
get_a() Espacio de memoria
Abel Federico Pérez Hernández 39
40. Referencia a miembros públicos
Una vez creado un objeto de una clase, el programa puede
referenciar sus miembros públicos utilizando el operador
punto:
ob1.set_a(10); //versión de ob1 de a con 10
ob2.set_a(99); //versión de ob2 de a con 99
Cada objeto contiene su propia copia de cada variable
declarada dentro de la clase:
La variable a vinculada ob1 es distinta de la variable a
vinculada a ob2
Abel Federico Pérez Hernández 40
41. Ejemplo #1: asignar un valor a a en los objetos ob1 y
ob2 y después mostrar dicho valor
#include <iostream.h>
class myclass {
//privado a myclass
int a;
public:
void set_a(int num);
int get_a();
}
void myclass::set_a(int num) {
a = num;
}
void myclass::get_a() {
return a;
}
Abel Federico Pérez Hernández 41
42. Ejemplo #1: asignar un valor a a en los objetos ob1 y
ob2 y después mostrar dicho valor
main ()
{
myclass ob1, ob2;
ob1.set_a(10);
ob2.set_a(99);
cout << ob1.get_a() << “n”;
cout << ob2.get_a() << “n”;
return 0;
}
Abel Federico Pérez Hernández 42
43. Ejemplo #2: la siguiente función main() producirá un
error de compilación
#include <iostream.h>
main ()
{
myclass ob1, ob2;
¿Por qué?
ob1.a = 10; //Error! no se puede acceder a un
ob2.a = 99; //miembro privado mediante
//funciones no miembro
cout << ob1.get_a() << “n”;
cout << ob2.get_a() << “n”;
return 0;
}
Abel Federico Pérez Hernández 43
44. Ejemplo #2: la siguiente función main() producirá un
error de compilación
#include <iostream.h>
main ()
{
myclass ob1, ob2;
ob1.a = 10; //Error! no se puede acceder a un
ob2.a = 99; //miembro privado mediante
//funciones no miembro
cout << ob1.get_a() << “n”;
cout << ob2.get_a() << “n”;
return 0;
}
Abel Federico Pérez Hernández 44
45. Ejemplo #3: declaración de a como miembro público
#include <iostream.h>
class myclass {
public:
//a es pública y no hace falta set_a() o get_a()
int a;
};
main ()
{
myclass ob1, ob2;
ob1.a = 10; //se accede a “a” mediante “.”
ob2.a = 99;
cout << ob1.a << “n”;
cout << ob2.a << “n”;
return 0;
}
Abel Federico Pérez Hernández 45
46. Ejemplo #4: crea una clase stack que
implementa una pila que guarda caracteres
#include <iostream.h>
#define SIZE 10
//Declara una clase pila de caracteres
class stack {
char stck[SIZE]; //guarda la pila
int tos; //índice de la cabeza de la pila
public:
void init(); //inicializa la pila
void push(char ch); //mete carácter en la pila
char pop(); //saca carácter de la pila
};
//Inicializa la pila
void stack::init() {
tos = 0;
}
Abel Federico Pérez Hernández 46
47. Ejemplo #4: crea una clase stack que
implementa una pila que guarda caracteres
//Mete un carácter
void stack::push(char ch) {
if(tos == SIZE) {
cout << “La pila está llena”;
return;
}
stck[tos] = ch;
tos++;
}
//Saca un carácter
char stack::pop() {
if(tos == 0) {
cout << “La pila está vacía”;
return 0; //nulo cuando la pila está vacía
}
tos--;
return stck[tos];
} Abel Federico Pérez Hernández 47
48. Ejemplo #4: crea una clase stack que implementa
una pila que guarda caracteres
main() {
stack s1, s2; //crea dos pilas
int i;
//inicializa las pilas
s1.init();
s2.init();
s1.push(‘a’); s2.push(‘x’);
s1.push(‘b’); s2.push(‘y’);
s1.push(‘c’); s2.push(‘z’);
for(i=0; i<3; i++)
cout << “saca de s1: “ << s1.pop() << “n”;
for(i=0; i<3; i++)
cout << “saca de s2: “ << s2.pop() << “n”;
return 0;
}
Abel Federico Pérez Hernández 48
49. Salida del ejemplo #4
Saca de s1: c
Saca de s1: b
Saca de s1: a
Saca de s2: z
Saca de s2: y
Saca de s2: x
Abel Federico Pérez Hernández 49
50. Observaciones sobre el programa
Clase stack contiene dos variables privadas:
stck: guarda los caracteres enviados a la pila
tos: contiene el indice de la cabeza de la pila
Clase stack tiene tres funciones publicas:
init(): inicializa la pila
push(): mete un carácter a la pila
pop(): saca un carácter de la pila
Dentro de main() se crean dos pilas independientes s1 y
s2
Cada objeto tiene su copia de stck y tos
Todos los objetos de la clase stack comparten las
funciones miembro Federico Pérez Hernández
Abel 50
51. Diferencias entre C y C++
En C, se especifica una lista de parámetros
vacía mediante void, mientras que en C++ es
opcional.
C: char funcion(void); En C++ es
redundante
C++: char funcion(); En C, no se dice
nada sobre los parámetros
En C++, todas las funciones deben estar en
forma de prototipo, mientras que en C es
opcional. Abel Federico Pérez Hernández 51
52. Diferencias entre C y C++
En C++, si una función se declara para
que devuelva un valor, entonces debe
hacerlo, mientras que en C no
necesariamente.
En C, las variables locales se deben
declarar sólo al principio de un bloque,
mientras que en C++ se pueden declarar
en cualquier lugar.
Abel Federico Pérez Hernández 52
53. Ejemplo #1 de diferencias entre C y C++
En un programa en C, es una práctica común
declarar main( ) como se muestra a continuación
cuando no toma argumentos de la línea de
órdenes:
main (void)
Pero en C++, el uso de void es redundante:
main( )
Abel Federico Pérez Hernández 53
54. Ejemplo #2: este programa no compilará
¿por qué?
#include <iostream.h>
main() {
int a, b, c;
cout << “Introduzca dos números: ”;
cin >> a >> b;
c = sum(a, b);
cout << “La suma es: ” << c;
return 0;
}
sum(int a, int b) {
return a+b;
} Abel Federico Pérez Hernández 54
55. Ejemplo #2: este programa no compilará
porque sum() no está como prototipo
#include <iostream.h>
int sum(int a, int b);
main() {
int a, b, c;
cout << “Introduzca dos números: ”;
cin >> a >> b;
c = sum(a, b);
cout << “La suma es: ” << c;
return 0;
}
//Esta función necesita un prototipo
sum(int a, int b) {
return a+b;
} Abel Federico Pérez Hernández 55
56. Ejemplo #3: declaración de variables locales
en cualquier lugar
#include <iostream.h>
main() {
int i; //variables locales declaradas al
//principio
cout << “Introduzca un número: ”;
cin >> i;
//Calcula el factorial
int j, fact=1; //variables declaradas después
//de las sentencias de acción
for(j=i; j>=1; j--) fact = fact * j;
cout << “El factorial es: ” << fact;
return 0;
} Abel Federico Pérez Hernández 56
57. Ventajas de C++ en la declaración de
variables locales
La posibilidad de declarar variables
locales cerca del lugar donde se usan por
primera vez ayuda a:
Clarificar el código
Prevenir efectos laterales no deseados
Abel Federico Pérez Hernández 57
58. Introducción a la sobrecarga de
funciones
Mecanismo que permite a C++ adquirir un tipo
de polimorfismo.
Base que permite al entorno de programación
de C++ ampliarse de manera dinámica.
com e
Función 1 part part Función 2
e com
nombre
a condición que
ra difie
difie argumentos ra
Tipo Abel Federico Pérez Hernández Número 58
59. Sobrecarga de funciones
Principal ventaja:
Ayudan a reducir la complejidad de un programa
porque permite que operaciones relacionadas se
referencien con el mismo nombre.
¿Cómo sobrecargar una función?
Declarar y definir todas las versiones requeridas.
El compilador seleccionará automáticamente la versión
correcta para llamar con base en el tipo o número de
argumentos.
Abel Federico Pérez Hernández 59
60. Ejemplo #1: sobrecarga de la función abs( )
para calcular el valor absoluto
#include <iostream.h>
/*Contra ejemplo: la biblioteca estándar de C
contiene las funciones abs(), labs() y fabs() que
devuelven el valor absoluto de un entero, de un
largo y de un real, resp. */
//Sobrecarga abs() de tres formas
int abs(int n);
long abs(long n);
double abs(double n);
main () {
cout << “Valor abs de –10: ” << abs(-10) << “n”;
cout << “Valor abs de –10L: “ << abs(-10L) << “n”;
cout << “Valor abs de –10.01: ” << abs(-10.01) <<
“n”;
return 0;
Abel Federico Pérez Hernández 60
}
61. Ejemplo #1: sobrecarga de la función abs( )
para calcular el valor absoluto
//abs( ) para enteros
int abs(int n) {
cout << “Con un entero abs()n”;
return n < 0 ? –n : n;
}
//abs( ) para largos
long abs(long n) {
cout << “Con un largo abs()n”;
return n < 0 ? –n : n;
}
//abs( ) para reales
double abs(double n) {
cout << “Con un real abs()n”;
return n < 0 ? –n : n;
}
Abel Federico Pérez Hernández 61
62. Ejemplo #2: sobrecarga de la función date( ) para
aceptar fecha como cadena/entero
#include <iostream.h>
//fecha como cadena
void date(char *date);
//fecha en números
void date(int month, int day, int year);
main() {
date(“8/23/95”);
date(8, 23, 95);
return 0;
}
//Fecha como cadena
void date(char *date) {
cout << “Fecha: ” << date << “n”;
} Abel Federico Pérez Hernández 62
63. Ejemplo #2: sobrecarga de la función date( ) para
aceptar fecha como cadena/entero
//Fecha como enteros
void date(int month, int day, int year)
{
cout << “Fecha: ” << month << “/”;
cout << day << “/” << year << “n”;
}
Abel Federico Pérez Hernández 63
64. Ejemplo #3: las versiones de la función f1
difieren en el número de argumentos
#include <iostream.h>
void f1(int a);
void f1(int a, int b);
main() {
f1(10);
f1(10, 20);
return 0;
}
void f1(int a) {
cout << “En f1(int a)n”;
}
void f1(int a, int b) {
cout << “En f1(int a, int b)n”;
} Abel Federico Pérez Hernández 64
65. Ejemplo #4: el tipo devuelto no basta para
permitir la sobrecarga de funciones
//Este fragmento es incorrecto y no se
compilará
int f1(int a);
double f1(int a);
.
.
.
f1(10); //¿A que función llama el
compilador?
Abel Federico Pérez Hernández 65
66. Bibliografía
Diapositivas PowerPoint de Sonia
Mendoza Chapa
smendoza@cs.cinvestav.mx
Fundamentos de programación C/C++,
Ernesto Peñaloza Romero, Cuarta
Edición, Ed. Alfaomega.
Abel Federico Pérez Hernández 66