Programación Orientada a Objetos (POO)
Abel Federico Pérez Hernández
Abel Federico Pérez Hernández 2
Programas pequeños
Código espaguettien programas demiles de líneas
Años 50s
Años 60s y 70s
LenguajeEnsamblador
LenguajeFORTRAN
Programaciónestructurada
Programas estructurados: se basan en estructuras de control (secuencia, condicional e iteración), uso mínimo de GOTO y subrutinas independientes quesoportan recursividad y variables locales, e.g. Algol y PascalProgramas mayores
de 50,000 líneas
Introducción
Abel Federico Pérez Hernández 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.
Calcular
mediao1
o2
o3
o1
Programa
Abel Federico Pérez Hernández 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íanpreviamente 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 entreobjetos.
Abel Federico Pérez Hernández 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 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 objeto a partir de ellas.
Abel Federico Pérez Hernández 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 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 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
� Aumenta la cohesión de los componentes de sistema
� Suele ser confundido con el principio de ocultamiento
nombre_Alumnocurpdirecciónteléfononombre_Cursocalificación…
Alumno
nombrecurpdirecciónteléfono…
Curso
nombrecalificación…
Abel Federico Pérez Hernández 10
Principio de ocultamiento
� Definición: mecanismo que protege datos y métodoscontra cualquier interferencia o mal uso.
Privados: sólo los conoce y son accesibles por otra parte del objeto, i.e. una parte del programa que esta fuera del objetono puede accederlos.
Públicos: otras partes del programa pueden accederlos… se utilizan para ofrecer una interfaz controlada a las partesprivadas del objeto.
propiedades
métodosObjeto
Empaquetamientomediante un LOO
Interfaz
Abel Federico Pérez Hernández 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).
Abel Federico Pérez Hernández 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.
Tipo de datoClase generalde acciones
Acciónespecífica
C++
Abel Federico Pérez Hernández 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
…
Misma interfaz
Diferentesmecanismosde dirección
Abel Federico Pérez Hernández 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.
abs()
Interfaz genérica(multi-métodos)
Implementación de abs()
Implementación de labs()
Implementación de fabs()
entero
entero largo
real
Abel Federico Pérez Hernández 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 16
Polimorfismo aplicado a operadoresaritméticos
� La mayoría de los lenguajes de programación proveenuna aplicacion limitada del polimorfismo de operadoresaritméticos:
� e.g. en lenguaje C, el signo + se utiliza paraañ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 17
Ejemplo de una lista
insert(i)extract(i)
Pila
insert(i)extract(i)
ColaImplementaciónLIFO
ImplementaciónFIFO
cliente
…
Lista
insert(i)extract(i)
� Substituir objetos con interfaces idénticas en tiempode ejecución.
� Simplificar la definición del cliente.
� Desacoplar objetos entre si.
• Mismos tipos de datos• Aplicación sobre un conjunto de métodos
Abel Federico Pérez Hernández 18
Herencia
� Definición: proceso mediante el cual un objeto puedeadquirir las propiedades de otro.
� Permite que un objeto soporte el concepto de clasificación jerárquica:
Casa
Edificio
Estructura
Obra-hombre
es parte de
+
-
General
Abel Federico Pérez Hernández 19
Herencia
� En cualquier caso, la clase hija hereda todas lascualidades asociadas con la clase padre y le añade suspropias características definitorias.
Apio
Vegetales
Plantas
Organismosvivos
es parte de
� Sin el uso de clasificaciones jerárquicas cada objetotendría que definir todas las características que se
relacionan con él explícitamente.
Abel Federico Pérez Hernández 20
Lenguajes Orientados a Objetos
� Action Script 3
� Ada
� C++
� C#
� VB.NET
� Visual FoxPro
� Clarion
� Builder C++
� Delphi
� Harbour
� Eiffel
� Java
� Lexico (en castellano)
� Objetive-C
� Ocaml
� Oz
� Perl
� PHP (versión 5)
� PowerBuilder
� Python
� Ruby
� Smalltalk
� Magik (SmallWorld)
Abel Federico Pérez Hernández 21
E/S en C++
� Es posible utilizar las funciones printf() y scanf(), pero C++ ofreceun 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 22
E/S en C++
� Ejemplos de <<: permite mostrar cualquier tipo básico de C++
cout << “Muestra esta cadena en pantalla\n”;
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 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 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 solaexpresión de E/S */
cout << i << ‘ ‘ << j << ‘ ‘ << d;
return 0;
}
Abel Federico Pérez Hernández 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 26
Ejemplo #4: pide un entero, un real y unacadena 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 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 entradaesperando una operación posterior
¿Cuál es la salida?
Abel Federico Pérez Hernández 28
Salida del ejemplo #4
� Los elementos de datos individuales pueden separarsemediante: 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 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 30
Comentarios en C++
� C++ propone dos formas diferentes de hacercomentarios:
� Forma #1: es posible crear comentarios en variaslí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 31
Ejemplo #1: combinación de comentarios en estilos C y C++
/* Este es un comentario al estilo de C. Esteprograma determina si un entero es par o impar
*/#include <iostream.h>
main () {
int num; //comentario de una línea en C++
//leer el númerocout << “Introduzca el número a probar: “;
cin >> num;
//ver si es par o imparif((num%2)==0) cout << “El número es par\n”;
else cout << “El número es impar\n”;
return 0;
}
Abel Federico Pérez Hernández 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 33
Clases
� Definición: mecanismo para crear objetos
Declaración
class nombre-clase {
funciones y variables privadas
public:
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
Miembrosde la clase
Abel Federico Pérez Hernández 34
Clases
� Por omisión, todas las funciones y variables declaradas en una claseson privadas
class nombre-clase {
funciones y variables privadas
public:
funciones y variables públicas
} lista de objetos;
Accesibles porotros miembros de esta clase
Accesibles porotros miembros de esta clase y porcualquier otraparte del programa quecontenga la clase
Abel Federico Pérez Hernández 35
Ejemplo de declaración de una claseen 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 porcualquier parte del programa
Abel Federico Pérez Hernández 36
Definición de funciones miembro
tipo nombre-clase::nombre-func(lista-parámetros)
{
...//cuerpo de la función
}
Operador de resolución del ámbito(asociación)
Abel Federico Pérez Hernández 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 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 comoespecificador de tipo:
myclass ob1, ob2; //objetos de tipo myclass
Abel Federico Pérez Hernández 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.
a
set_a(int num)get_a()
myclassMyclass
ocupa
Espacio de memoria
Abel Federico Pérez Hernández 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 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 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 43
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;
}
¿Por qué?
Abel Federico Pérez Hernández 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 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 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 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 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 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 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 lasfunciones miembro
Abel Federico Pérez Hernández 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 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 53
Ejemplo #1 de diferencias entre C y C++
� En un programa en C, es una práctica comúndeclarar main( ) como se muestra a continuacióncuando 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 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 55
Ejemplo #2: este programa no compilaráporque sum() no está como prototipo
#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;
}
//Esta función necesita un prototipo
sum(int a, int b) {
return a+b;
}
int sum(int a, int b);
Abel Federico Pérez Hernández 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 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 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.
Función 1 Función 2
nombre
comparte comparte
Tipo
argumentos
a condición que
Número
difiera difiera
Abel Federico Pérez Hernández 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 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 formasint 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 61
Ejemplo #1: sobrecarga de la función abs( )para calcular el valor absoluto
//abs( ) para enterosint abs(int n) {
cout << “Con un entero abs()\n”;
return n < 0 ? –n : n;
}
//abs( ) para largoslong abs(long n) {
cout << “Con un largo abs()\n”;
return n < 0 ? –n : n;
}
//abs( ) para realesdouble abs(double n) {
cout << “Con un real abs()\n”;
return n < 0 ? –n : n;
}
Abel Federico Pérez Hernández 62
Ejemplo #2: sobrecarga de la función date( ) para
aceptar fecha como cadena/entero
#include <iostream.h>
//fecha como cadenavoid date(char *date);
//fecha en númerosvoid 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 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 64
Ejemplo #3: las versiones de la función f1difieren 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 65
Ejemplo #4: el tipo devuelto no basta parapermitir 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 66
Bibliografía
�Diapositivas PowerPoint de Sonia Mendoza Chapa
�Fundamentos de programación C/C++, Ernesto Peñaloza Romero, CuartaEdición, Ed. Alfaomega.