lenguaje c++: ana laureano_uam-a lenguaje c++ ana lilia laureano-cruces universidad autónoma...

91
Lenguaje C++: Ana Laureano_UA M-A Lenguaje C++ Lenguaje C++ Ana Lilia Laureano-Cruces Ana Lilia Laureano-Cruces Universidad Autónoma Universidad Autónoma Metropolitana - Metropolitana - Azcapotzalco Azcapotzalco

Upload: pastora-fontan

Post on 22-Jan-2016

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++

Ana Lilia Laureano-CrucesAna Lilia Laureano-Cruces

Universidad Autónoma Universidad Autónoma Metropolitana - AzcapotzalcoMetropolitana - Azcapotzalco

Page 2: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++IntroducciónIntroducción

• Bjarne Stroustrup, mediados de los 80s, los Bjarne Stroustrup, mediados de los 80s, los laboratorios Bell de AT&T.laboratorios Bell de AT&T.

• Permite la manipulación de hardware y de Permite la manipulación de hardware y de memoria a bajo nivel, esto es, manipulación memoria a bajo nivel, esto es, manipulación de lenguajes ensambladores a partir de un de lenguajes ensambladores a partir de un lenguaje de alto nivel. lenguaje de alto nivel.

• Es un lenguaje multi-paradigma: su Es un lenguaje multi-paradigma: su estructura esta basada en los TAD’s. Donde lo estructura esta basada en los TAD’s. Donde lo que utilizamos son las interfaces de la que utilizamos son las interfaces de la librería.librería.

• .h (interfaz) y .cpp (la implementación y la .h (interfaz) y .cpp (la implementación y la aplicación)aplicación)

Page 3: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++ Introducción Introducción

• Paso de la programación estructurada (C) Paso de la programación estructurada (C) a estilos de abstracción de datos y a estilos de abstracción de datos y orientación a objetos.orientación a objetos.

• No es un lenguaje puro orientado a No es un lenguaje puro orientado a objetos. Conserva características del C y objetos. Conserva características del C y añade nuevos conceptos.añade nuevos conceptos.

• Utiliza dos formas de abstracción: Utiliza dos formas de abstracción: generalización (jerarquía) y agregación generalización (jerarquía) y agregación (parte de)(parte de)

• Reservación: cuarto, hotel, persona, Reservación: cuarto, hotel, persona, fecha; Avión, y Boing 747. fecha; Avión, y Boing 747.

Page 4: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++ Extensiones respecto al C Extensiones respecto al C

• No orientadas a objeto No orientadas a objeto – Mejoras en entrada/salida - streamsMejoras en entrada/salida - streams– Polimorfismo: sobrecarga de funciones y Polimorfismo: sobrecarga de funciones y

operadores (tiempo de compilación) y operadores (tiempo de compilación) y clases derivadas y funciones virtuales clases derivadas y funciones virtuales (tiempo de ejecución)(tiempo de ejecución)

– Parámetros por defecto. ReferenciasParámetros por defecto. Referencias

Page 5: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++FundamentosFundamentos

• C ++, es un superconjunto de C, C ++, es un superconjunto de C, continúa siendo un conjunto de continúa siendo un conjunto de subrutinas o funciones, siendo estas subrutinas o funciones, siendo estas estrictas o procedimientos.estrictas o procedimientos.

• Se pueden encontrar en diferentes Se pueden encontrar en diferentes archivos, y cuentan siempre con la archivos, y cuentan siempre con la función MAIN, que recibe el control función MAIN, que recibe el control inicialmente. Además de contar con inicialmente. Además de contar con las librerías de funciones del las librerías de funciones del compilador C ++.compilador C ++.

Page 6: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++Elementos del programaElementos del programa

• COMENTARIOSCOMENTARIOS• //// Comentario de una sola líneaComentario de una sola línea• /* /* Comentario multilínea Comentario multilínea */*/• BLOQUES DE CÓDIGOBLOQUES DE CÓDIGO• {{ Todos los bloques de código van entre Todos los bloques de código van entre

corchetes corchetes }}• FIN DE LINEAFIN DE LINEA• Todas las instrucciones terminan con un punto y Todas las instrucciones terminan con un punto y

coma coma ;;

Page 7: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++Tipo básico de datosTipo básico de datos

• Tipo de dato Tipo de dato boolbool tiene dos tiene dos valores asociados true o falsevalores asociados true o false

• DECLARACIÓN DE UNA DECLARACIÓN DE UNA VARIABLEVARIABLE

• <Tipo de dato> <Tipo de dato> Nombre_variable;Nombre_variable;

• INICIALIZACION DE UNA INICIALIZACION DE UNA VARIABLEVARIABLE

• <Tipo de dato> <Tipo de dato> Nombre_variable = [valor];Nombre_variable = [valor];

• EJEMPLO:EJEMPLO:• intint variable1; variable1;• boolbool variable2=true; variable2=true;

Page 8: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++ Tipo básico de datos Tipo básico de datos

• Variables y aritmética.Variables y aritmética.• Todo nombre y/o expresión tiene un Todo nombre y/o expresión tiene un

tipo.tipo.• El tipo determina las operaciones que El tipo determina las operaciones que

se pueden realizar con el.se pueden realizar con el.• Conversiones implícitas.Conversiones implícitas.• En asignaciones y operaciones En asignaciones y operaciones

algebraicas el lenguaje lleva a cabo algebraicas el lenguaje lleva a cabo todas las conversiones implícitas que todas las conversiones implícitas que faciliten el uso y sean seguras.faciliten el uso y sean seguras.

Page 9: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++FundamentosFundamentos

• Declaración de constantes:Declaración de constantes:– CONSTCONST

• Tipos derivadosTipos derivados– Arreglos [ ]:Arreglos [ ]: comenzando con el índice 0. comenzando con el índice 0.– Apuntadores *:Apuntadores *: precede al identificador es una precede al identificador es una

apuntador a una localidad de memoria del tipo apuntador a una localidad de memoria del tipo declarado, puede ser leído o modificado su declarado, puede ser leído o modificado su contenido.contenido.

– Referencias &:Referencias &: regresa la dirección de la regresa la dirección de la variable.variable.

Page 10: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++ArreglosArreglos

• Un arreglo es un conjunto de tipos de datos básicosUn arreglo es un conjunto de tipos de datos básicos

• DECLARACIÓN DE UN ARREGLODECLARACIÓN DE UN ARREGLO• <Tipo de dato básico> Nombre_variable[Número de <Tipo de dato básico> Nombre_variable[Número de

elementos];elementos];

• INICIALIZACION DE UN ARREGLOINICIALIZACION DE UN ARREGLO• <Tipo de dato> Nombre_variable = {valor1, valor2, …, <Tipo de dato> Nombre_variable = {valor1, valor2, …,

valorN};valorN};

• EJEMPLO:EJEMPLO:• charchar arreglo1 arreglo1[10];[10];• floatfloat arreglo2 = arreglo2 = {1.5, 2.3, 6,7};{1.5, 2.3, 6,7};

Page 11: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++ Arreglos Arreglos

MultidimencionalesMultidimencionales• DECLARACIÓN DE UN ARREGLO DECLARACIÓN DE UN ARREGLO

MULTIDIMENSIONALMULTIDIMENSIONAL• <Tipo de dato básico> Nombre_variable[Número <Tipo de dato básico> Nombre_variable[Número

de elementos][Numero de elementos];de elementos][Numero de elementos];

• INICIALIZACION DE UN ARREGLO INICIALIZACION DE UN ARREGLO MULTIDIMENSIONALMULTIDIMENSIONAL

• <Tipo de dato> Nombre_variable = { {valor1, <Tipo de dato> Nombre_variable = { {valor1, valor2, …, valorN}, {valor1, valor2, …, valorN} };valor2, …, valorN}, {valor1, valor2, …, valorN} };

• EJEMPLO:EJEMPLO:• charchar arreglo1[10][10]; arreglo1[10][10];• int arreglo2int arreglo2[ ]={{1,2,3},{4,5,6}{7,8,9}};[ ]={{1,2,3},{4,5,6}{7,8,9}};

Page 12: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++

• Operadores y sentenciasOperadores y sentencias– SentenciasSentencias

• Misma sintaxis y semántica que las de CMisma sintaxis y semántica que las de C

– Operadores idem sentencias excepto: Operadores idem sentencias excepto: • new, delete, delete[ ], ::new, delete, delete[ ], ::• <<, >><<, >>• Sobrecarga Sobrecarga

Page 13: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Interfaz (.h) Qué

Implementación (.cpp)Cómo

Page 14: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++FundamentosFundamentos

• Primer programa en C++Primer programa en C++• // pp1.cpp// pp1.cpp• # include# include < iostream.h> < iostream.h>• main ( )main ( )• {{

cout <<cout << “ hola mundo ” “ hola mundo ” << endl<< endl;;

}}

Page 15: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• //ejem1.cpp//ejem1.cpp• #include#include<stdio.h><stdio.h>• #include#include<iostream.h><iostream.h>• main ( )main ( )• {{• char Res;char Res;• int int **p,q;p,q;• Res = 's';Res = 's';• while((Res=='s') ||(Res=='S')) {while((Res=='s') ||(Res=='S')) {

• q = 100; // se asigna 100 a la variable entera qq = 100; // se asigna 100 a la variable entera q• p = p = &&q; //se asigna a p la direccion de qq; //se asigna a p la direccion de q• printf ("%d", *p); // el contenido de pprintf ("%d", *p); // el contenido de p

• cout << endl;cout << endl;• cout << "deseas desplegarlo de nuevo? (S/N) \n";cout << "deseas desplegarlo de nuevo? (S/N) \n";• cin >> Res;cin >> Res;• }}• }}

Page 16: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• //este programa nos muestra el uso de las instrucciones para utilizar//este programa nos muestra el uso de las instrucciones para utilizar• //apuntadores//apuntadores• //pointer1.cpp//pointer1.cpp• #include<iostream.h>#include<iostream.h>• main(void)main(void)• {{• int *int *p; //p es un apuntador a datos de tipo enterop; //p es un apuntador a datos de tipo entero• p=new intp=new int; //asigna memoria para un entero; //asigna memoria para un entero• //simpre se debe verificar si la asignacion fue exitosa//simpre se debe verificar si la asignacion fue exitosa• if (!p){if (!p){

cout<<"fallo la asignacion";cout<<"fallo la asignacion";• return 1;return 1;• }}• *p*p=20; //asigna a esa memoria el valor de 20=20; //asigna a esa memoria el valor de 20• cout<<"el valor depositado en la direccion apuntada por p es ";cout<<"el valor depositado en la direccion apuntada por p es ";• cout<< cout<< *p*p; //prueba que funciona mostrando el valor; //prueba que funciona mostrando el valor• delete pdelete p; // libera la memoria; // libera la memoria• return 0;return 0;• }}

Page 17: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++

• Scope Scope (alcance)(alcance)– Fichero: declaraciones que no pertenecen Fichero: declaraciones que no pertenecen

a función o clase algunaa función o clase alguna– Función: etiquetasFunción: etiquetas– Local: cualquier nombre declarado en un Local: cualquier nombre declarado en un

bloque pertenece al bloque.bloque pertenece al bloque.– Clase: declaraciones asociadas a una claseClase: declaraciones asociadas a una clase

• Cada variable tiene un “scope” o un Cada variable tiene un “scope” o un contexto contexto

Page 18: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++Apuntadores y vectoresApuntadores y vectores

• Punteros y vectores.Punteros y vectores.char v[10]; //vector de 10 caracteres (0 a 9)char v[10]; //vector de 10 caracteres (0 a 9)char *p; // puntero a un carácterchar *p; // puntero a un carácterp = &v[3]; //p apunta al cuarto elemento de vp = &v[3]; //p apunta al cuarto elemento de v

• punteros - operaciones asociadaspunteros - operaciones asociadas– int *p; //puntero a enteroint *p; //puntero a entero– int **p; //puntero a puntero de enteroint **p; //puntero a puntero de entero– int (*vp) [10]; //puntero a vector de 10 enterosint (*vp) [10]; //puntero a vector de 10 enteros– int (*fp) ( char, char *);// puntero a funciónint (*fp) ( char, char *);// puntero a función

Page 19: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++Tipos definidos por el Tipos definidos por el

usuariousuario• ESTRUCTURAS (Registros)ESTRUCTURAS (Registros)struct struct date_sdate_s { { int day, month, year;int day, month, year; } } aDateaDate;;

La definición de arriba de aDate es también La definición de arriba de aDate es también la declaración de una estructura llamada la declaración de una estructura llamada date_s Podemos definir otras variables de date_s Podemos definir otras variables de este tipo referenciando la estructura por el este tipo referenciando la estructura por el nombre: nombre:

structstruct date_sdate_s AnotherDateAnotherDate;;

Page 20: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++Tipos definidos por el Tipos definidos por el

usuariousuario• EnumeracionesEnumeraciones

– enumenum_nombre {lista_de_elementos}_nombre {lista_de_elementos}– Así como lo indica el formato a la lista Así como lo indica el formato a la lista

de elementos se le asignan valores de elementos se le asignan valores enteros secuencialmente iniciando por enteros secuencialmente iniciando por cero o los que el usuario asigne:cero o los que el usuario asigne:

– enumenum colorescolores { negro, rojo, verde, azul} { negro, rojo, verde, azul} – enumenum colorescolores { negro = 2, rojo, verde, { negro = 2, rojo, verde,

azul}azul}

Page 21: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• //Struct1.cpp//Struct1.cpp• //este programa demuestra algunas maneras de accesar//este programa demuestra algunas maneras de accesar• //los elementos de una estructura//los elementos de una estructura• #include<stdio.h>#include<stdio.h>• #include<conio.h>#include<conio.h>• structstruct s_tipo s_tipo {{• int i;int i;• double d;double d;• char str[80];char str[80];• }} s s;;• void main(void)void main(void)• {{• clrscr();clrscr();• printf("Introduce un entero: ");printf("Introduce un entero: ");• scanf("%d", &scanf("%d", &s.is.i););• printf("Introduce un numero de punto flotante: ");printf("Introduce un numero de punto flotante: ");• scanf("%lf", &scanf("%lf", &s.ds.d););• printf("Introduce una cadena: ");printf("Introduce una cadena: ");• scanf("%s", &scanf("%s", &s.strs.str););• printf("%d %lf %s", printf("%d %lf %s", s.is.i, , s.ds.d, , s.strs.str););• }}

Page 22: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++Estructuras de control de flujoEstructuras de control de flujo

• EJEMPLOEJEMPLO• For (int i=0; i<5; i++)For (int i=0; i<5; i++)• {{

cout << “Hola cout << “Hola mundo”<< i;mundo”<< i;

• }}

Page 23: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++OperadoresOperadores

Los operadores de Los operadores de incremento incremento ++++ y y ---- pueden ser explicados pueden ser explicados por medio del por medio del siguiente ejemplo. Si siguiente ejemplo. Si tienes la siguiente tienes la siguiente secuencia de secuencia de instrucciones instrucciones

a = a + 1; b = a; a = a + 1; b = a;

Se puede usarSe puede usar

b = b = a++;a++;

b = b = ++a;++a;

Page 24: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Paso de parámetros por Paso de parámetros por valor y por refrencia en valor y por refrencia en

C++C++• En una abstracción funcional todos En una abstracción funcional todos

los parámetros por default son por los parámetros por default son por valor y la función regresa un valor valor y la función regresa un valor como resultado.como resultado.

• En una abstracción procedural los En una abstracción procedural los parámetros pueden pasar por valor parámetros pueden pasar por valor y/o por referenciay/o por referencia

Page 25: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Paso de parámetros por valor en Paso de parámetros por valor en C++C++

#include <iostream.h> // paso por valores

void swap(int a, int b);

main( )

{int i = 421, j = 53;

cout <<"antes: i = " << i << " j = " << j << "\n";

swap(i,j);

cout <<"despues: i = " << i << " j = " << j << "\n";

}

void swap(int a,int b)

{int temp;

temp = a;

a = b;

b = temp;

cout <<"Al final y dentro de swap: i = " << a << " j = " << b << "\n";

}

Page 26: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Paso de parámetros por referencia Paso de parámetros por referencia en C++en C++

#include <iostream.h> // paso por referencias

void swap(int &a, int &b);

main()

{int i = 421, j = 53;

cout <<"antes: i = " << i << " j = " << j << "\n";

swap(i,j);

cout <<"despues: i = " << i << " j = " << j << "\n";

}

void swap(int &a,int &b)

{int temp;

temp = a;

a = b;

b = temp;

cout <<"Al final y dentro de swap: i = " << a << " j = " << b << "\n";

}

Page 27: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Paso de parámetros por referencia Paso de parámetros por referencia en C++: otra formaen C++: otra forma

#include <iostream.h> // paso por referencias

void swap(int *a, int *b); // a y b es una variable de tipo apuntador a entero

main()

{int i = 421, j = 53;

cout <<"antes: i = " << i << " j = " << j << "\n";

swap(&i,&j); // se pasan las direcciones de las localidades i y j

cout <<"despues: i = " << i << " j = " << j << "\n";

}

void swap(int *a,int *b)

{int temp;

temp = a;

a = b;

b = temp;

cout <<"Al final y dentro de swap: i = " << a << " j = " << b << "\n";

Page 28: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

//refer.cpp// programa que ejemplifica el paso de parametros por valor// y por referencia# include <iostream.h>int q, w;void cambia(int x, int y){int temp;temp=x;x=y;y=temp;}void cambia1( int *a, int *b){ int t; t = *a; *a=*b; *b= t;}main() { cout<<"dame un valor entero"; cin>> q; cout<<"Dame un valor entero "; cin>> w; cout<<"Escribo los valores antes de mandarlos"; cout<<"q= "<<q<<" "<<"w= "<<w<<endl; cambia(q,w); cout<<"escribo los valores despues de haberlos enviado a cambia"; cout<<q<<" "<<w<<endl; cambia1(&q,&w);// intercambio de sus valores cout<< "escribo los valores despues de haberlos enviado a cambia 1"; cout<<q<<" "<<w<<endl; return 0;}

Page 29: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• Las clases son consideradas como una generalización de las estructuras (struct).

• Las ventajas de las clases es que pueden estar formadas por partes privadas y por partes públicas.

Clases de C++Clases de C++

Page 30: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Clases de C++Clases de C++

class Estructura {

public:

int posicion;

int cuantos;

char caracter;

};

Esta clase es equivalente a una estructura

Page 31: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Clase Vs. EstructuraClase Vs. Estructura

• ClaseClase– Todos los elementos Todos los elementos

son privados.son privados.– Pueden estar Pueden estar

formadas por partes formadas por partes privadas y públicas.privadas y públicas.

• Estructura Estructura – Todos sus elemntos Todos sus elemntos

son públicos.son públicos.– Puede contener Puede contener

funciones como funciones como miembros.miembros.

Page 32: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• //estruc.cpp//estruc.cpp• #include<iostream.h>#include<iostream.h>• struct cl {struct cl {• int obt_i(void);int obt_i(void);

// esto es publico// esto es publico• void poner_i(int j);void poner_i(int j); //por //por

defectodefecto• private:private:• int i;int i;• };};• int cl::obt_i(void)int cl::obt_i(void)• {{• return i;return i;• }}• void cl::poner_i(int j)void cl::poner_i(int j)• {{• i=j;i=j;• }}• main(void)main(void)• {{• char Res;char Res;• Res='s';Res='s';• cl s;cl s;• while ((Res=='s') || (Res=='S')) {while ((Res=='s') || (Res=='S')) {• s.poner_i(10);s.poner_i(10);• cout <<s.obt_i();cout <<s.obt_i();• cout <<endl;cout <<endl;• cout<<"deseas cout<<"deseas

desplegarlo de nuevo? (S/N) \n";desplegarlo de nuevo? (S/N) \n";• cin>> Res;cin>> Res;• }}• }}

• //clase.cpp//clase.cpp• #include<iostream.h>#include<iostream.h>• class cl {class cl {• int i;int i;

//privado por defecto//privado por defecto• public:public:• int obt_i(void);int obt_i(void);• void poder_i(int j);void poder_i(int j);• };};• int cl::obt_i(void)int cl::obt_i(void)• {{• return i;return i;• }}• void cl::poner_i(int jvoid cl::poner_i(int j• {{• i=j;i=j;• }}• main(void)main(void)• {{• char Res;char Res;• Res='s';Res='s';• cl s;cl s;• while ((Res=='s') || (Res=='S')) {while ((Res=='s') || (Res=='S')) {• s.poner_i(10);s.poner_i(10);• cout <<s.obt_i();cout <<s.obt_i();• cout <<endl;cout <<endl;• cout<<"deseas cout<<"deseas

desplegarlo de nuevo? (S/N) \n";desplegarlo de nuevo? (S/N) \n";• cin>> Res;cin>> Res;• }}• }}

Page 33: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

// este programa crea y usa la clase punto #include <conio.h> class Punto { int x, y; public: Punto(int u, int v) { x=u; y=v; } // funcion constructora void print() {gotoxy(x-4, y+1); cprintf("x=%2d y=%2d\r\n", x, y); } void putch(char c) { gotoxy(x, y); ::putch(c); } };main() // traza un punto y escribe sus coordenadas

{ clrscr();

Punto p1(20,6);

p1.putch('.');

p1.print(); }

Clases de C++Clases de C++

Page 34: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Las uniones en C++Las uniones en C++

• Las uniones sólo asignan espacio Las uniones sólo asignan espacio suficiente para almacenar el campo de suficiente para almacenar el campo de mayor tamaño. (revisar el programa mayor tamaño. (revisar el programa union.cpp)union.cpp)

• Sus miembros son públicos.Sus miembros son públicos.• Puede contener funciones como Puede contener funciones como

miembros.miembros.• En C++, existe la unión anónima.En C++, existe la unión anónima.

Page 35: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

La Unión anónimaLa Unión anónima

• No tiene nombre, ni variables No tiene nombre, ni variables especificadas en su decalaración.especificadas en su decalaración.

• Los nombres de los miembros se acceden Los nombres de los miembros se acceden directamente.directamente.

• No pueden incluir elementos privados o No pueden incluir elementos privados o protegidos. protegidos.

Page 36: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

//unionmod.cpp//programa que ejemplifica la union anonima#include<iostream.h>char Res;main(){

Res='s';while((Res=='s') || (Res=='S')) {//esto declara una funcion anonima

union{ //sin nombreint i;char ch[2];

}; //no se especifica variables/*ahora se hace referencia a: i y ch sin identificarun nombre de union o los operadores punto o

flecha */i=88;cout<<i<<" " << ch[0];cout <<endl;cout<<"Desea desplegarlo de nuevo?

(S/N) ";cin >> Res;

}}

Page 37: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Las clases y las estructurasLas clases y las estructuras

Pueden ser superclases de otras Pueden ser superclases de otras clases y estructuras definidas clases y estructuras definidas

posteriormente; heredandoles sus posteriormente; heredandoles sus miembros. Las uniones quedan miembros. Las uniones quedan

excluidas de esta propiedad.excluidas de esta propiedad.

Page 38: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Operador de resolución Operador de resolución ambitoambito

• Para referenciar una variable global (:: i = 3)Para referenciar una variable global (:: i = 3)• Para implementar una función miembro de Para implementar una función miembro de

una claseuna clase

int c1::obt_i (void){

return i;}

Page 39: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Para manejo dinámico de Para manejo dinámico de memoria (New y Delete)memoria (New y Delete)

• New: New: – asigna memoria para un asigna memoria para un

objeto del tipo y tamaño objeto del tipo y tamaño especificados.especificados.

– Devuelve un apuntador a Devuelve un apuntador a un objeto del tipo un objeto del tipo especificado, que hace especificado, que hace referencia al espacio referencia al espacio reservado.reservado.

• Delete: Delete: – libera la memoria libera la memoria

reservada para un objeto.reservada para un objeto.– Sólo se puede aplicar a Sólo se puede aplicar a

apuntadores que han sido apuntadores que han sido retornados por el operador retornados por el operador new.new.

Page 40: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

El manejo del tamaño en newEl manejo del tamaño en new

• En el caso de arreglos se especifica En el caso de arreglos se especifica explícitamente.explícitamente.

• En otros casos viene definido por el tipo.En otros casos viene definido por el tipo.

• El tipo puede ser definido por el usuario.El tipo puede ser definido por el usuario.

Page 41: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

//programa que utiliza la asignacion de arrays utilizando new//este programa realiza lo mismo que el anterior pero de una manera//distinta//array2.cpp#include<iostream.h>main(void){

float *p;int i;p=new float[10]; //obtiene un array de 10 elementosif (!p) {

cout<<"fallo en la asignacion\n";return 1;

}// asigna valores de 100 a 109for (i=0; i<10; i++) p[i]=100.00 +i; // asigna contenidos al arrayfor (i=0; i<10; i++) cout <<p[i]<<" "; // muestra los contenidos del arraydelete [10] p; // borra el array completoreturn 0;

}

Page 42: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Constructores y Constructores y DestructoresDestructores

• En otros lenguajes uno tiene que asegurar la En otros lenguajes uno tiene que asegurar la inicialización de los objetos.inicialización de los objetos.

• C++ los proporciona integrados a la sintaxis C++ los proporciona integrados a la sintaxis del lenguaje.del lenguaje.

• Su ejecución se realiza sin invocarlos Su ejecución se realiza sin invocarlos explícitamente.explícitamente.

• Cuando se declara un objeto de un tipo de Cuando se declara un objeto de un tipo de clase que cuente con constructores, éstos se clase que cuente con constructores, éstos se ejecutan automáticamente.ejecutan automáticamente.

Page 43: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

ConstructoresConstructores

• Es una función miembro especial de una clase que es Es una función miembro especial de una clase que es llamada automáticamente siempre que se declara un llamada automáticamente siempre que se declara un objeto de esa clase.objeto de esa clase.

• Su función es crear e inicializar un objeto de su clase.Su función es crear e inicializar un objeto de su clase.• Como funciones miembro aceptan argumentos.Como funciones miembro aceptan argumentos.• Tiene el mismo nombre de la clase a la que pertence.Tiene el mismo nombre de la clase a la que pertence.

Page 44: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

DestructoresDestructores

• Un objeto es destruido automáticamente al salir Un objeto es destruido automáticamente al salir del ámbito en el que ha sido definido.del ámbito en el que ha sido definido.

• Pero si han sido creados con new, tienen Pero si han sido creados con new, tienen forzosamente que ser destruidos con delete.forzosamente que ser destruidos con delete.

• Tiene el mismo nombreTiene el mismo nombre que la clase precedido que la clase precedido por una ~.por una ~.

• No tiene argumento y no es heredado.No tiene argumento y no es heredado.

Page 45: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Constructores y Constructores y DestructoresDestructores

• // esto crea la clase cola// esto crea la clase cola• class cola {class cola {

int c [100];int c [100]; int ppio, fin;int ppio, fin;

• public:public:• cola (void); // constructorcola (void); // constructor• ~ cola (void); // destructor~ cola (void); // destructor

• void meter (int y);void meter (int y);• int sacar (void);int sacar (void);} }

Page 46: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Constructores y Constructores y DestructoresDestructores

• cola::cola (void)cola::cola (void)• {{

ppio = fin = 0;ppio = fin = 0;• }}

• cola::~cola (void)cola::~cola (void)• {{• }}

Page 47: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Constructores Constructores ParametrizadosParametrizados

• Permiten crear las mismas tipos de objetos pero con Permiten crear las mismas tipos de objetos pero con diferentes identificadores.diferentes identificadores.

• Permite identificar en un mismo programa a diferentes Permite identificar en un mismo programa a diferentes objetos del mismo tipo (Ej. Cola1 de Cola2). objetos del mismo tipo (Ej. Cola1 de Cola2).

• Y almcenar diferentes objetos en ellas.Y almcenar diferentes objetos en ellas.• Se logra pasando argumentos a la función constructora.Se logra pasando argumentos a la función constructora.

Page 48: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Constructores Constructores ParametrizadosParametrizados

• // esto crea la clase cola// esto crea la clase cola• class cola {class cola {

int c [100];int c [100];

int ppio, fin;int ppio, fin;• public:public:• cola (int id); // constructorcola (int id); // constructor• ~ cola (void); // destructor~ cola (void); // destructor

• void meter (int y);void meter (int y);• int sacar (void);int sacar (void);

} }

Page 49: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Constructores Constructores ParametrizadosParametrizados

• // esta es la función constructora// esta es la función constructora• cola::cola (int id)cola::cola (int id)• {{

ppio = fin = 0;ppio = fin = 0;

quien = id;quien = id;

cout << “ cola” << quien << “inicializada \ n”;cout << “ cola” << quien << “inicializada \ n”;• }}• Para pasar el argumento a las funciones constructoras, Para pasar el argumento a las funciones constructoras,

éstos deben ir a continuación del nombre del objeto y éstos deben ir a continuación del nombre del objeto y encerrado entre paréntesis con el siguiente formato:encerrado entre paréntesis con el siguiente formato:– Tipo_clase var (lista de argumentos)Tipo_clase var (lista de argumentos)– Cola a (Cola a (11), b(), b(22) // crea dos objetos cola) // crea dos objetos cola

Page 50: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

TAD Cola: InterfazTAD Cola: Interfaz• //conspara.h//conspara.h• #include<iostream.h>#include<iostream.h>• #include<conio.h>#include<conio.h>• //esto crea la clase cola//esto crea la clase cola• //DEFINICION//DEFINICION• # define Max_long 100# define Max_long 100• class cola {class cola {• int c[Max_long];int c[Max_long];• int ppio, fin;int ppio, fin;• int quien; //guarda el numero de la cola IDint quien; //guarda el numero de la cola ID• public:public:• cola(cola(int idint id); //constructor); //constructor• ~cola(void); //destructor~cola(void); //destructor• void meter(int i);void meter(int i);• int sacar(void);int sacar(void);• void Enc_Elem(int busca);void Enc_Elem(int busca);• };};

Page 51: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

TAD Cola: TAD Cola: ImplementaciónImplementación

• //Conspara.cpp//Conspara.cpp• #include<b:\include\#include<b:\include\conspara.hconspara.h>>• //IMPLEMENTACION//IMPLEMENTACION• //Esta es la funcion constructora//Esta es la funcion constructora• cola::cola(int id)cola::cola(int id)• {{• ppio = fin = 0;ppio = fin = 0;• quien = id;quien = id;• cout << "cola" << quien << "inicializada\n";cout << "cola" << quien << "inicializada\n";• }}• //Esta es la funcion destructora//Esta es la funcion destructora• cola::~cola(void)cola::~cola(void)• {{• cout<< "cola" << quien << " destruida\n";cout<< "cola" << quien << " destruida\n";• }}

Page 52: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• void cola::meter(int i)void cola::meter(int i)• {{• if(ppio==Max_long) {if(ppio==Max_long) {• cout << "la cola esta llena\n";cout << "la cola esta llena\n";• return;return;• }}• ppio++;ppio++;• c[ppio] = i;c[ppio] = i;• }}• int cola::sacar(void)int cola::sacar(void)• {{• if(fin==ppio){if(fin==ppio){• cout <<"la cola esta vacia\n";cout <<"la cola esta vacia\n";• return 0;return 0;

else {else {• fin++;fin++;• return c[fin];return c[fin];

}}• }}

Page 53: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• void cola::Enc_Elem(int busca)void cola::Enc_Elem(int busca)• {{• int j, elem;int j, elem;• if(ppio==Max_long) {if(ppio==Max_long) {• cout << "la cola esta llena\n";cout << "la cola esta llena\n";• return;return;• }}• j=ppio;j=ppio;• for(j=1; j<=ppio; j++){for(j=1; j<=ppio; j++){• elem=c[j];elem=c[j];• if(elem==busca) {if(elem==busca) {• cout << "El elemento se encontró en la cola: " << busca << "\cout << "El elemento se encontró en la cola: " << busca << "\

n";n";• }}• else {else {• if(j==ppio){if(j==ppio){• cout << "El elemento no se encontró en la cola \n";cout << "El elemento no se encontró en la cola \n";• }}• }}• }}• }}

Page 54: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• //prinpara.cpp//prinpara.cpp• //PROGRAMA PRINCIPAL//PROGRAMA PRINCIPAL• #include#include<b:\bin\<b:\bin\conspara.hconspara.h>>• main(void)main(void)• {{• char Res;char Res;• Res='s';Res='s';• clrscr();clrscr();• while ((Res=='s') || (Res=='S')) {while ((Res=='s') || (Res=='S')) {• cola a(1), b(2); //crea dos objetos colacola a(1), b(2); //crea dos objetos cola• a.meter(10);a.meter(10);• b.meter(19);b.meter(19);• a.meter(20);a.meter(20);• b.meter(1);b.meter(1);• a.Enc_Elem(2);a.Enc_Elem(2);• cout<<a.sacar()<<" ";cout<<a.sacar()<<" ";• cout<<a.sacar()<<" ";cout<<a.sacar()<<" ";• cout<<b.sacar()<<" ";cout<<b.sacar()<<" ";• cout<<b.sacar()<<" \n";cout<<b.sacar()<<" \n";• cout<<"deseas desplegarlo de nuevo? (S/N) \n";cout<<"deseas desplegarlo de nuevo? (S/N) \n";• cin >> Res;cin >> Res;• }}• }}

Page 55: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Funciones y Clases AmigasFunciones y Clases Amigas

Una clase puede conceder a otra Una clase puede conceder a otra funcion o clase privilegiada funcion o clase privilegiada

acceso a sus zonas privadas.acceso a sus zonas privadas.

Page 56: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Por quéPor quéExisten situaciones en las cuales dos clases deben Existen situaciones en las cuales dos clases deben

compartir una misma función, por razones de compartir una misma función, por razones de

eficiencia o reusabilidadeficiencia o reusabilidad.. (ejemplo amiga.h y (ejemplo amiga.h y amiga.cpp) ; en este caso accede a la amiga.cpp) ; en este caso accede a la

variable variable color color que es parte que es parte privada privada de ambas de ambas clasesclases

Cuando dos diferentes clases tienen algo en comúnque tienen que comparar.(ejemplo speed.cpp) ;

comparten la velocidad de los dos vehículos (camión y automóvil)

Page 57: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Referencias anticipadas a Referencias anticipadas a clasesclases

• Existen cuando se encuentran implicadas Existen cuando se encuentran implicadas funciones friendfunciones friend. (ejemplo Amiga.h y . (ejemplo Amiga.h y speed.cpp).speed.cpp).

• Si la Si la función amigafunción amiga tiene como tiene como parámetros parámetros ambas clasesambas clases..

• Es para que el compilador sepa que el Es para que el compilador sepa que el identificador pertenece a una clase.identificador pertenece a una clase.

Page 58: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Cómo lograrloCómo lograrlo

• Lo logra declarando expilícitamente a la Lo logra declarando expilícitamente a la clase o función como clase o función como AMIGA(friend).AMIGA(friend).

• En cualquier parte privada o pública.En cualquier parte privada o pública.

• Una Una función miembrofunción miembro de una clase puede de una clase puede ser una ser una función amiga de otra clasefunción amiga de otra clase..

Page 59: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Class cosa {private:

int datos;public:

friend void cargatest (cosa t, int x);}

// Implementación de la función Amiga cargatest()

void cargatest (cosa t, int x){

t.datos=x;}

Page 60: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• //DEFINICION//DEFINICION• //Amiga.//Amiga.hh

• class class linealinea; // declaración vacía para que el código posterior sepa que es una clase; // declaración vacía para que el código posterior sepa que es una clase • class recuadroclass recuadro{{• int color; //Color del recuadroint color; //Color del recuadro• int xsup, ysup; //Esquina superior izquierdaint xsup, ysup; //Esquina superior izquierda• int xinf, yinf; //Esquina inferior derechaint xinf, yinf; //Esquina inferior derecha• public:public:• friendfriend int int mismo_colormismo_color((linealinea l, recuadro b); l, recuadro b);• void pon_color(int c);void pon_color(int c);• void definir_recuadro(int x1, int y1, int x2, int y2);void definir_recuadro(int x1, int y1, int x2, int y2);• void mostrar_recuadro(void);void mostrar_recuadro(void);• };};• class lineaclass linea{{• int color; //Color de la lineaint color; //Color de la linea• int xinicial, yinicial; //Inicio y Fin de lineaint xinicial, yinicial; //Inicio y Fin de linea• int lon; //longitudint lon; //longitud• public:public:• friendfriend int int mismo_colormismo_color(linea l, recuadro b);(linea l, recuadro b);• void pon_color(int c);void pon_color(int c);• void definir_linea(int x, int y, int l);void definir_linea(int x, int y, int l);• void mostrar_linea(void);void mostrar_linea(void);• };};

Page 61: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• //Amiga.cpp#include<iostream.h>#include<conio.h>#include<b:\include\amiga.h>//IMPLEMENTACION//Proporciona un valor verdadero si la linea y el recuadro tienen el mismo color.

• // no es miembro de ninguna claseint mismo_color (linea l, recuadro b){ if(l.color==b.color) return 1; // color es una variable privada

return 0; }

//Implementacion de las funciones miembro de las CLASES• void recuadro::pon_color(int c)

{ color = c;}void linea::pon_color(int c){ color = c;}void recuadro::definir_recuadro(int x1, int y1, int x2, int y2){

xsup = x1;ysup = y1;xinf = x2;yinf = y2;

}

Page 62: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• void void recuadrorecuadro::mostrar_recuadro(void)::mostrar_recuadro(void)• {{• int i;int i;• textcolor(color);textcolor(color);• gotoxy(xsup, ysup);gotoxy(xsup, ysup);• for(i=xsup; i<=xinf; i++) cprintf("-");for(i=xsup; i<=xinf; i++) cprintf("-");• gotoxy(xsup, yinf-1);gotoxy(xsup, yinf-1);• for(i=xsup; i<=xinf; i++) cprintf("-");for(i=xsup; i<=xinf; i++) cprintf("-");• gotoxy(xsup, ysup);gotoxy(xsup, ysup);• for(i=ysup; i<=yinf; i++){for(i=ysup; i<=yinf; i++){• cprintf("|");cprintf("|");• gotoxy(xsup, i);gotoxy(xsup, i);• }}• gotoxy(xinf, ysup);gotoxy(xinf, ysup);• for(i=ysup; i<=yinf; i++){for(i=ysup; i<=yinf; i++){• cprintf("|");cprintf("|");• gotoxy(xinf, i);gotoxy(xinf, i);• }}• }}

Page 63: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• voidvoid linea linea::definir_linea(int x, int y, int l)::definir_linea(int x, int y, int l)• {{• xinicial = x;xinicial = x;• yinicial = y;yinicial = y;• lon = l;lon = l;• }}• void void linealinea::mostrar_linea(void)::mostrar_linea(void)• {{• int i;int i;• textcolor(color);textcolor(color);• gotoxy(xinicial, yinicial);gotoxy(xinicial, yinicial);• for(i=0; i<lon; i++) cprintf("-");for(i=0; i<lon; i++) cprintf("-");• }}

Page 64: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

//prinamig.cpp#include<b:\bin\amiga.h>//PROGRAMA PRINCIPAL

main(void){

char Res;recuadro b; // declaración de claseslinea l; // declaración de clasesRes='s';clrscr();while((Res=='s') || (Res=='S')){b.definir_recuadro(10, 10, 15, 15);b.pon_color(3);b.mostrar_recuadro();l.definir_linea(2,2,10);l.pon_color(2);l.mostrar_linea();if(!mismo_color(l,b)) cout << "no son iguales";cout << "\n Pulse una tecla";getch();

//Ahora hacemos que linea y recuadro tengan el mismo colorl.definir_linea(2, 2, 10);l.pon_color(3);l.mostrar_linea();if(mismo_color(l,b)) cout << "tiene el mismo color \n";cout <<"deseas desplegarlo de nuevo? (S/N) \n";cin >> Res;clrscr();

}}

Page 65: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• Speed.cppSpeed.cpp• #include<iostream.h>#include<iostream.h>• #include<conio.h>#include<conio.h>• class camionclass camion; ; // declaración vacía para que el código posterior sepa que es una clase// declaración vacía para que el código posterior sepa que es una clase • class automovilclass automovil { {• int pasajeros;int pasajeros;• int velocidad;int velocidad;• public:public:• automovil(int p, int s) { pasajeros = p; velocidad = s; }automovil(int p, int s) { pasajeros = p; velocidad = s; }• friendfriend int int mayor_velocidadmayor_velocidad(automovil c, camion t);(automovil c, camion t);• };};• class camionclass camion { {• int peso;int peso;• int velocidad;int velocidad;• public:public:• camion(int pe, int s) { peso = pe; velocidad = s; }camion(int pe, int s) { peso = pe; velocidad = s; }• friendfriend int int mayor_velocidadmayor_velocidad(automovil c, camion t);(automovil c, camion t);• };};• /* La función amiga toma un valor positivo si la velocidad del automóvil/* La función amiga toma un valor positivo si la velocidad del automóvil• es mayor que la del camión. Toma un valor igual a cero, si ambas velocidadeses mayor que la del camión. Toma un valor igual a cero, si ambas velocidades• son iguales. Y finalmente, esta función toma un valor negativo, sison iguales. Y finalmente, esta función toma un valor negativo, si• la velocidad del camión es mayor que la del automóvil*/la velocidad del camión es mayor que la del automóvil*/

Page 66: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• int mayor_velocidadint mayor_velocidad(automovil c, camion t)(automovil c, camion t)• {{• return c.velocidad-t.velocidad;return c.velocidad-t.velocidad;• }}• mainmain(void)(void)• {{• char Res;char Res;• int t;int t;• Res = 's';Res = 's';• clrscr();clrscr();• while ((Res=='s') || (Res=='S')) {while ((Res=='s') || (Res=='S')) {• automovil c1(4, 55), c2(6,120);automovil c1(4, 55), c2(6,120);• camion t1(900, 55), t2(1000, 65);camion t1(900, 55), t2(1000, 65);• cout << "Comparando c1 y t1: \n";cout << "Comparando c1 y t1: \n";• t = t = mayor_velocidadmayor_velocidad(c1, t1); //aqui comparamos t1 y c1(c1, t1); //aqui comparamos t1 y c1• if(t<0) cout <<"El camion va mas rapido. \n";if(t<0) cout <<"El camion va mas rapido. \n";• else if(t==0) cout <<"Ambos tienen la misma velocidad. \n";else if(t==0) cout <<"Ambos tienen la misma velocidad. \n";• else cout <<"El automovil tiene mayor velocidad. \n";else cout <<"El automovil tiene mayor velocidad. \n";• cout<<"deseas desplegarlo de nuevo? (S/N) \n";cout<<"deseas desplegarlo de nuevo? (S/N) \n";• cin >> Res;cin >> Res;• }}• }}

Page 67: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

// speed1.cpp ; una forma diferente de utilizar a las funciones amigas#include<iostream.h>#include<conio.h>class camion;class automovil {

int pasajeros;int velocidad;

public:automovil(int p, int s) { pasajeros = p; velocidad = s; }int mayor_velocidad(camion t);

};class camion {

int peso;int velocidad;

public:camion(int pe, int s) { peso = pe; velocidad = s; }friend int automovil::mayor_velocidad(camion t);

// la función amiga es declarada en la clase que quiere utilizarla//aqui esta funcion es amiga de la clase automovil y//miembro de la clase camion, por lo que utilizamos//el operador de resolucion de ambito, para declarar dicha relacion

};/* la función mayor_velocidad se declara como miembro de la clase automovil y es amiga de la clase camion; y se tiene que utilizar el operador de resolución de ámbito :: para indicar que la función es miembro de la clase*/

Page 68: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

int automovil::mayor_velocidad(camion t)

{return velocidad-t.velocidad;//Aqui como mayor_velocidad es miembro de la clase automovil,//solamente el objeto camion debe ser pasado a ella.

}main(void){

char Res;int t;Res = 's';clrscr();while ((Res=='s') || (Res=='S')) {

automovil c1(4, 55), c2(6,120);camion t1(900, 55), t2(1000, 65);cout << "Comparando c1 y t1: \n";t = c1.mayor_velocidad(t1); //aqui comparamos t1 y c1if(t<0) cout <<"El camion va mas rapido. \n";else if(t==0) cout <<"Ambos tienen la misma velocidad. \n";else cout <<"El automovil tiene mayor velocidad. \n";cout << "Comparando c2 y t2: \n";t = c2.mayor_velocidad(t2); //aqui comparamos t1 y c1if(t<0) cout <<"El camion va mas rapido. \n";else if(t==0) cout <<"Ambos tienen la misma velocidad. \n";else cout <<"El automovil tiene mayor velocidad. \n";cout<<"deseas desplegarlo de nuevo? (S/N) \n";cin >> Res;

}}

Page 69: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Sobre funciones amigasSobre funciones amigas

• IMPORTANTE:IMPORTANTE:

– Una función amiga no está al alcance de la clase de la cual es amiga. Una función amiga no está al alcance de la clase de la cual es amiga. (esto es, no es miembro).(esto es, no es miembro).

– No puede ser llamada usando la sintaxis de selección de miembro No puede ser llamada usando la sintaxis de selección de miembro (scope ::).(scope ::).

– Se utiliza la palabra reservada Se utiliza la palabra reservada friendfriend que debe preceder a la que debe preceder a la declaración de la función.declaración de la función.

– Al ser una función amiga de una clase puede acceder a los miembros Al ser una función amiga de una clase puede acceder a los miembros privados de la clase.privados de la clase.

Page 70: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Clases AmigasClases AmigasLa declaración amiga hace a La declaración amiga hace a

todas las funcionestodas las funciones miembro de miembro de esa clase esa clase amigas de otraamigas de otra..

Class x {friend class y;//…

};

Page 71: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Herencia SencillaHerencia Sencilla

Es una forma en que una clase Es una forma en que una clase hereda solamente de una clase.hereda solamente de una clase.

Page 72: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Vocabulario de ClasesVocabulario de Clases

• Una clase que es heredada, se llama Una clase que es heredada, se llama clase base o clase madre.clase base o clase madre.

• Una clase que hereda se llama clase Una clase que hereda se llama clase clase derivada o clase hija.clase derivada o clase hija.

• Los elementos de una clase pueden ser: Los elementos de una clase pueden ser: publicos, privados o protegidos.publicos, privados o protegidos.

Page 73: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Un elemento: Public, Private, Un elemento: Public, Private, ProtectedProtected

• PublicPublic: puede ser accedido por cualquier : puede ser accedido por cualquier función del programa.función del programa.

• PrivatePrivate: puede ser accedido por fucniones : puede ser accedido por fucniones miembro.miembro.

• ProtectedProtected:: es lo mismo que privadoes lo mismo que privado pero pero además puedenademás pueden ser accedido/s por ser accedido/s por funciones miembro y amigas.funciones miembro y amigas.

Page 74: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Cuando una calse hereda de Cuando una calse hereda de otraotra

• Los elementos privados de la clase base Los elementos privados de la clase base son inaccesibles a la clase derivada.son inaccesibles a la clase derivada.

• Si se desea que las clases derivadas Si se desea que las clases derivadas tengan acceso a los elementos privados.tengan acceso a los elementos privados.– Se debe declarar a los elementos privados Se debe declarar a los elementos privados

como protegidos.como protegidos.

Page 75: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Acceso a Clases: públicoAcceso a Clases: público

Publico:Publico: todos los elementos todos los elementos publicospublicos y y ptotegidosptotegidos de la clase base se convierten de la clase base se convierten

en en publicos y protegidospublicos y protegidos de las clases de las clases derivadas. Los privados permanecen derivadas. Los privados permanecen

privados.privados.

Page 76: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Acceso a Clases:protegidoAcceso a Clases:protegido

Protegido:Protegido: todos los elementostodos los elementos publicos y protegidospublicos y protegidos de la clase de la clase base se convierten en elementosbase se convierten en elementos

protegidosprotegidos de la clase derivada. Los de la clase derivada. Los privados permanecen privados.privados permanecen privados.

Page 77: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Acceso a Clases : privadoAcceso a Clases : privado

Privado:Privado: todos los elementostodos los elementos publicos y protegidospublicos y protegidos de la clase de la clase base se convierten en elementosbase se convierten en elementos privadosprivados de la clase derivada. Los de la clase derivada. Los

privados permanecen privados.privados permanecen privados. (ejemplo herencia.cpp)(ejemplo herencia.cpp)

Page 78: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Clases VirtualesClases Virtuales

• Las clases virtuales se utilizan cuando una clase base Las clases virtuales se utilizan cuando una clase base es clase base de mas de una clase derivada. Lo anterior es clase base de mas de una clase derivada. Lo anterior con el fin de garnatizar que sólo se herede (comparta) con el fin de garnatizar que sólo se herede (comparta) una clase base. Una clase virtual debe tener:una clase base. Una clase virtual debe tener:– Ningún constructor, o al menosNingún constructor, o al menos– Un constructor sin argumentos, o Un constructor sin argumentos, o – Un constructor en que todos sus argumentos tengan valores por Un constructor en que todos sus argumentos tengan valores por

omisión.omisión.

• Cuando se construye un objeto de una clase derivada, Cuando se construye un objeto de una clase derivada, se se aplican primero los constructores de la clase base aplican primero los constructores de la clase base virtualvirtual..

Page 79: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

// verue.h// programa que crea una clase para manejarla con herencia// este programa define 2 campos y 4 operaciones exclusivas de la// clase vehiculo_ruedas.#ifndef __VERUE_H__#define __VERUE_H__class vehiculo_ruedas {

int ruedas;int pasajeros;

public:void est_ruedas (int num);int obt_ruedas (void);void est_pasaj (int num);int obt_pasaj (void);

};#endif

Page 80: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

//camion.h// se crea una clase camion con un campo y 3 operaciones exclusivas// de ella y por otro lado hereda las operaciones de la clase// vehiculo_ruedas#include <iostream.h>#include "b:\include\verue.h"class camion:virtual public vehiculo_ruedas {

int carga; public:

void est_carga (int tamanio);int obt_carga (void);void mostrar (void);

};

Page 81: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

//auto.h// programa que define a la clase auto, con un campo y 3 operaciones// exclusivas de esta clase y por otro lado hereda las de// vehiculo_ruedas#include <iostream.h>#include "b:\include\verue.h"enum tipo {coche, camioneta, furgon };class automovil: virtual public vehiculo_ruedas { tipo tipo_coche; public:

void est_tipo (tipo t);tipo obt_tipo (void);void mostrar (void);

};

Page 82: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

//verue.cpp// verue.imp// este programa implementa las funciones de la clase// vehiculo_ruedas#include "b:\include\verue.h"void vehiculo_ruedas::est_ruedas (int num) { ruedas = num;}int vehiculo_ruedas::obt_ruedas (void) { return ruedas;}void vehiculo_ruedas::est_pasaj (int num) { pasajeros = num;}int vehiculo_ruedas::obt_pasaj (void) { return pasajeros;}

Page 83: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

//camion.cpp// camion.imp// en esta seccion de programa se implementan las funciones// de la clase camion.#include "b:\include\camion.h"void camion::est_carga (int num) { carga = num;}int camion::obt_carga (void) { return carga;}void camion::mostrar (void){ cout<<"ruedas: "<<obt_ruedas () << "\n"; cout<<"pasajeros: " <<obt_pasaj() <<"\n"; cout<<"capacidad de carga en pies cúbicos: "<<carga << "\n";

}

Page 84: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• //auto.cpp//auto.cpp• // implementacion de las funciones de la clase auto// implementacion de las funciones de la clase auto• #include#include "b:\include\ "b:\include\auto.hauto.h""• void automovil::est_tipo (tipo t) {void automovil::est_tipo (tipo t) {• tipo_coche = t ;tipo_coche = t ;• }}• tipo automovil::obt_tipo (void) {tipo automovil::obt_tipo (void) {• return tipo_coche;return tipo_coche;• }}• void automovil::mostrar (void) {void automovil::mostrar (void) {• cout << "ruedas: " << obt_ruedas() << "\n";cout << "ruedas: " << obt_ruedas() << "\n";• cout << "pasajeros: " << obt_pasaj() << "\n";cout << "pasajeros: " << obt_pasaj() << "\n";• cout << "tipo: " ;cout << "tipo: " ;

Page 85: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

•switch (obt_tipo()) {switch (obt_tipo()) {• case camioneta:case camioneta:• cout << "camioneta \n";cout << "camioneta \n";• break;break;• case coche:case coche:• cout << "coche \n";cout << "coche \n";• break;break;• case furgon:case furgon:• cout << "furgon \n";cout << "furgon \n";• break;break;• }}•}}

Page 86: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

//autoycam.cpp#include "b:\include\camion.h"#include "b:\include\auto.h"void main (void) { camion c1, c2; automovil a; c1.est_ruedas (18); c1.est_pasaj(2); c1.est_carga(3200);

c2.est_ruedas (6); c2.est_pasaj (3); c2.est_carga (1200); a.est_ruedas (4); a.est_pasaj (6); a.est_tipo (camioneta); a.mostrar (); c1.mostrar (); c2.mostrar ();}

Page 87: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Sobrecarga de FuncionesSobrecarga de Funciones

• Esta función esta ligada con el concepto Esta función esta ligada con el concepto de polimorfismo.de polimorfismo.

• Ejemplo una función que regrese la hora Ejemplo una función que regrese la hora actual y otra que regrese la hora después actual y otra que regrese la hora después de la media noche las dos en horas, de la media noche las dos en horas, minutos y segundos. minutos y segundos.

• En este caso las dos hacen lo mismo y En este caso las dos hacen lo mismo y nodeberían llamarse de forma diferente.nodeberían llamarse de forma diferente.

Page 88: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• C ++ permite que los nombres de las C ++ permite que los nombres de las funciones se sobrecarguen (overload). Es funciones se sobrecarguen (overload). Es decir que la misma función tenga mas de decir que la misma función tenga mas de una función.una función.– OverloadOverload GetTime GetTime– Void Void GetTimeGetTime (long* ticks); // segundos a (long* ticks); // segundos a

partir de la media nochepartir de la media noche– Void Void GetTimeGetTime (int* horas, int* minutos, int* (int* horas, int* minutos, int*

segundos)segundos)

Page 89: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

• La primera línea le dice que esta sobrecargada, La primera línea le dice que esta sobrecargada, esto es, que tiene varias definiciones y debe esto es, que tiene varias definiciones y debe aparecer antes que todas las declaraciones y aparecer antes que todas las declaraciones y definicones de dicha función.definicones de dicha función.

• Cuando se llama GetTime, el compilador Cuando se llama GetTime, el compilador compara el número y tipo de los argumentos y compara el número y tipo de los argumentos y escoge la que concuerde con la llamada.escoge la que concuerde con la llamada.

• Por este motivo todas las definiciones de una Por este motivo todas las definiciones de una función sobrecargada deben tener distinto función sobrecargada deben tener distinto número o tipo de paráemetros.número o tipo de paráemetros.

Page 90: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++Sobrecarga de operadoresSobrecarga de operadores

+ - * / % ^ & | ~ ! = < > += -= *= /= + - * / % ^ & | ~ ! = < > += -= *= /= %= ^= &=%= ^= &=

|= << >> >>= <<= == != <= >= |= << >> >>= <<= == != <= >= && || ++ -- && || ++ --

->* -> , [ ] ( ) new new[ ] delete delete[ ] ->* -> , [ ] ( ) new new[ ] delete delete[ ]

No se sobrecargan: No se sobrecargan: ::::...*.*

Page 91: Lenguaje C++: Ana Laureano_UAM-A Lenguaje C++ Ana Lilia Laureano-Cruces Universidad Autónoma Metropolitana - Azcapotzalco

Lenguaje C++: Ana Laureano_UAM-A

Lenguaje C++Lenguaje C++Sobrecarga de operadoresSobrecarga de operadores

class complex {class complex {double re, im;double re, im;

public:public:complex(double r, double i) : re(r), im(i){}complex(double r, double i) : re(r), im(i){}complex operator+(complex);complex operator+(complex);complex operator*(complex);complex operator*(complex);

bool operator==(complex);bool operator==(complex); bool operator<(complex);bool operator<(complex);};};void f()void f(){{ complex a(1, 3.1);complex a(1, 3.1);

complex b(1.2, 2);complex b(1.2, 2);complex c = b;complex c = b;if(a==b)if(a==b) a = b + c;a = b + c;b = b + c * a;b = b + c * a;c = a * b + complex(1,2);c = a * b + complex(1,2);

}}