You are on page 1of 26

TerceraSesin

Metodologas y Tcnicas de Programacin II Programacin Orientada a Objeto (POO) C++ Profesor:


Jos Luis Marina jlmarina@nebrija.es

Laboratorios:

Jos Luis Marina jlmarina@nebrija.es Borland Builder 6.0 20% 20% 80% 15% 65% 70%
1

Puntuacin:

Prcticas Laboratorio: Diarias Trabajo Laboratorio Exmen Parcial Exmen Final Exmen Final Extraordinario

3.0EstadodelPrograma
Introduccin a la POO
Historia de la Programacin Conceptos de POO C++ Mi primera Clase

Repaso de Conceptos

Estndares de Programacin Punteros y Memoria

E/S Control y Operadores

Clases y Objetos en C++


Uso y aplicacin Constructores

Funciones Amigas Constantes e inline

Sobrecarga
De Operadores De Funciones

Herencia.

Tipos de Visibilidad

Herencia Mltiple

Polimorfismo
Funciones Virtuales Polimorfismo y Sobrecarga.

Plantillas

Contenedores

Iteradores

3.1Repasodeclasesanteriores.
Estndares

Nombres de Ficheros:

Rectgulo.h (#ifndef NOMBRE_CLASE_H ...) Rectangulo.cpp test_Rectangulo.cpp (main)

Documentacin de Cabeceras de Ficheros.


/** *@filetest_Rectangulo.cpp *@briefPruebassobrelaclaseRectangulo.EjemploMetodosII * *@authorJoseLuisMarina<jlmarina@nebrija.es> *@date19FEB2007 */

Documentacin Cabeceras de Clases. Nombres de Clases, Objetos, atributos y mtodos Indexado y corchetes Ayudan a: Reutilizar Cdigo a Documentar (Cdigo ms comprensible)
3

3.1Repasodeclasesanteriores.
Programacin Estructurada Funciones
Encapsulan la complejidad Declaracin (.h) :
inttranslate(floatx,floaty,floatz);voidf(void)

Implementacin:
inttranslate(floatx,floaty,floatz) { x=y=z; return33; } //Correcto

Control del Flujo


if(expresion) { sentencias } else { sentencias } while(guess!=secret) { cout<<"Numero:"; cin>>apuesta; } swicth(c) //do{}while() { case'a':.... } for(i=0;i<128;i++) { cout<<i;

3.1Repasodeclasesanteriores.
Programacin Estructurada Operadores
Matemticos Lgicos Unarios Ternario (+ , - , *, /, %) (&&, ||) (-, + , ++, --) Relacionales Bits Direcciones (>, >=, <, <=, ==, !=) (&, |, ^, >>, <<) (&, *, ->)

a=b?b:(b=99);

Casting o Moldeado

Hay que utilizarlo con mucho cuidado y en pocas ocasiones


i=l;//Posibleperdidadedigitos i=f;//Posibleperdidainfo, i=static_cast<int>(l);//nowarning i=static_cast<int>(f);//nowarning charc=static_cast<char>(i);

Operador sizeof

Nmero de bytes utilizado por un tipo de datos o por una variable.

3.1Repasodeclasesanteriores.
Programacin Estructurada Tipos de Datos
Bsicos: Predefinidos Se combinan con : char, int, float, double) : long y short signed y unsigned.

Sus lmites estn en limits.h y float.h


#defineSHRT_MIN(32768) #defineSHRT_MAX32767

Algunas combinaciones no valen (long float

-- unsigned float )

Creados por el usuario (programador) El compilador aprende a usuarlos. Utiliza las declaraciones (por ejemplo de la clases)

3.4ProgramacinEstructuradaII
Punteros
Cuando se ejecuta un programa, primero se carga en memoria. Se cargan cada uno de sus elemento: main() funciones variables objetos Operador & : Nos permite saber la direccin de memoria de un elemento.
intdog,cat; voidf(intpet) { cout<<"petidnumber:"<<pet<<endl; } intmain() { inti,j; cout<<"f():"<<(long)&f<<endl; cout<<"dog:"<<(long)&dog<<endl; cout<<"i:"<<(long)&i<<endl; cout<<"j:"<<(long)&j<<endl; } f():4198736 dog:4323632 i:6684160 j:6684156

3.4ProgramacinEstructurada
Punteros
Las direcciones de memoria se pueden guardar dentro de otras variables para su uso posterior: Los Punteros. Un puntero se define con el operador * y el tipo de variable a la que apunta.
inti; int*pi; pi=&i;//Punteroaladireccindei. i=33;//Valordei. *pi=55;//Contenidodeloqueapuntapi //Atentoscon: inta,b,c;//Ok int*pa,pb,pc;//NoOK.Solopaespuntero. int*p1; int*p2;//Ok. 6684160 DIRpi

33
6684160

i pi

3.4ProgramacinEstructurada
Punteros: Modificando argumentos.
En el paso-por-valor se realiza una copia del argumento.
#include<iostream> usingnamespacestd; voidf(inta) { cout<<"a="<<a<<endl; a=5; cout<<"a="<<a<<endl; } intmain(){ intx=47; cout<<"x="<<x<<endl; f(x); cout<<"x="<<x<<endl; } #include<iostream> usingnamespacestd; voidf(int*a) { cout<<"a="<<a<<endl; cout<<"*a="<<*a<<endl; *a=5; } intmain(){ intx=47; cout<<"x="<<x<<endl; f(&x); cout<<"x="<<x<<endl; }

En el segundo caso el valor de aes el valor de la direccin de x. Un puntero es casi otro nombre de la misma variable.
9

3.4ProgramacinEstructurada
Referencias de C++.
Es un modo adicional de pasar una direccin a una funcin. Es ms limpio sintcticamente que con punteros.
#include<iostream> usingnamespacestd; voidf(int&a) { cout<<"a="<<a<<endl; cout<<"&a="<<&a<<endl; a=5; } intmain(){ intx=47; cout<<"x="<<x<<endl; f(x);//Parecepasoporvalor cout<<"x="<<x<<endl; } #include<iostream> usingnamespacestd; voidf(int*a) { cout<<"a="<<a<<endl; cout<<"*a="<<*a<<endl; *a=5; } intmain(){ intx=47; cout<<"x="<<x<<endl; f(&x); cout<<"x="<<x<<endl; }

Conseguimos lo mismo que con los punteros.

10

3.4ProgramacinEstructurada
Punteros y Referencias como Modificadores de Tipos de Dato
Todas las combinaciones de tipos de dato bsicos, especificadores, punteros y referencias:
voidf1(charc,inti,floatf,doubled); voidf3(unsignedcharuc,unsignedintui, unsignedshortintusi,unsignedlongintuli); voidf4(char*cp,int*ip,float*fp,double*dp); voidf5(shortint*sip,longint*lip, longdouble*ldp); voidf6(unsignedchar*ucp,unsignedint*uip, unsignedshortint*usip, unsignedlongint*ulip); voidf7(char&cr,int&ir,float&fr,double&dr); voidf8(shortint&sir,longint&lir, longdouble&ldr); voidf9(unsignedchar&ucr,unsignedint&uir, unsignedshortint&usir, unsignedlongint&ulir); voidf2(shortintsi,longintli,longdoubleld);

11

3.4ProgramacinEstructurada
Punteros y el tipo void
void* p; Puedo guardar cualquier tipo de direccin en ese puntero. Al asignar a void se pierde la informacin del tipo.
void*vp; charc; inti; floatf; doubled; //Asignoacualquiertipo vp=&c; vp=&i; vp=&f; vp=&d; ........... inti=99; void*vp=&i; *vp=3;//Erroralcompilar //Lomoldeamosaintantes. *((int*)vp)=3; .............

En general deberamos evitar los punteros a void.

12

3.4ProgramacinEstructurada
mbito o alcance (Scope)
El mbito nos dice cundo es vlida una variable o un objeto. Se extiende desde el punto en que es definida hasta la primera llave que se empareja con la llave de apertura anterior a que la variable fuera definida. Lo define su juego de llaves ms cercanas.
intmain() { intx; { inty; { intz; //Vlidas:x,y,z } //Adisaz. } } //Vlidas:XXXXXXXXXXXXXXX //Vlidas:XXXXXXXX

13

3.4ProgramacinEstructurada
Definicin de Variables al vuelo
El lenguaje C y otros lenguajes procedimentales obligan a declarar todas las variables al principio de un bloque. C++ permite definir variables en cualquier sitio dentro de un mbito Se puede definir una variable justo antes de usarla e inicializarla
{ intq=0; for(inti=0;i<100;i++) { q++;//qvienedembitomayor intp=12;//Cuntodurap? } intp=1;//Esunapdiferente } cout<<"Intro.caracter:"<<endl; while(charc=cin.get()!=q) { cout<<c<<"Noes'q'"<<endl; if(charx=c==a||c==b) cout<<"aob"<<endl; } cout<<"TypeA,B,orC"<<endl; switch(inti=cin.get()) { caseA:cout<<"A"<<endl;break; caseB:cout<<"B"<<endl;break; caseC:cout<<"C"<<endl;break; default:cout<<"Mal!"<<endl; }

14

3.4ProgramacinEstructurada
Memoria y Espacio de Almacenamiento
Variables Globales Se definen fuera de la llaves de las funciones incluida la funcin main(). Estn siempre disponibles. extern: Si estn en un fichero que no es en el que trabajamos ahora
//fichero_uno.cpp #include<iostream.h> intglobal; voidfunc(); intmain() { globe=12; cout<<globe<<endl; func();//Modifiesglobe cout<<globe<<endl; } voidfunc() { global=47; } //fichero_dos.cpp //Accedemosavariableglobalexterna externintglobal; //Alenlazarseresuelvela //referencia

15

3.4ProgramacinEstructurada
Memoria y Espacio de Almacenamiento
Variables Locales Son locales a una funcin ( o bloque {.....} ) y se crean en el rea de almacenamiento automtico. Variables de Registro. Es una variable local que se almacena en uno de los registros de la CPU. Utilizamos la palabra register pata sugerirle al compilador que coloque nuestra variable en un registro y as el acceso sea ms rpido. Variables de Estticas Cada vez que entramos en una funcin se genera el espacio de memoria para las variables y se reinicializan. Con static se le da a una variable una direccin fija constante (Como a una global pero en qu se diferencian?)
voidfunc() { staticinti=0; cout<<"i="<<++i<<endl; } intmain() { for(intx=0;x<10;x++) func(); } //SiquitamosstaticQuepasa? 16

3.4ProgramacinEstructurada
Memoria y Espacio de Almacenamiento
Identificador Espacio de memoria que aloja variable o funcin compilada.
x6 x5 x4 x3 x2 x1

Pila rea de almacenamiento para variables automticas. Variables locales a las funciones.

Memoria Global Para variables globales y cuando hacemos new().

17

3.4ProgramacinEstructurada
Constantes
#define MAX_BRAZOS 2 const int max_brazos=2;

El preprocesador el que sustituye en todo el cdigo MAX_BRAZOS por 2. No hay comprobaciones sintcticas. No podemos obtener la direccin de MAX_BRAZOS. MAX_BRAZOS no puede ser de un tipo definido por nosotros. max_brazos tiene mbito.

Con const en C++ es igual que una variable pero su valor no se puede cambiar. Podemos utilizar const en la lista de argumentos de una funcin. int suma(const int a, const int b) 18

3.4ProgramacinEstructurada
Valores Constantes
Por defecto se asume que estn en decimal. 10 es diez y no dos 0 al principio 0x al principio Punto flotante Se convierte de forma implcita, pero podemos ayudas utilizando el punto decimal. Tipo char Entre comillas simples char c = 'p'; Caracteres especiales: Octal Hexadecimal 045 0x1fe

Usamos la barra invertida: \n (nueva lnea), \t (tabulacion), \\ (barra invertida), \ (comillas dobles), \ (comilla simple), etc.

19

3.4ProgramacinEstructurada
Registros o Estructuras
Nos permiten agrupar un conjunto de variables en una estructura comn.
structStructure1 { charc; inti; floatf; doubled; }; intmain() { structStructure1s1,s2; s1.c=a;// s1.i=1; s1.f=3.14; s1.d=0.00093; s2.d=0.00093; } typedefstruct { charc; inti; floatf; doubled; }Structure2; intmain() { Structure2s1,s2; s1.c=a;// s1.i=1; s1.f=3.14; s1.d=0.00093; s2.d=0.00093; }

20

3.4ProgramacinEstructurada
Registros o Estructuras
Las estructuras agrupan informacin. Las clases agrupan informacin (atributos) y comportamiento (mtodos).
typedefstructAutoReferencia { inti; AutoReferencia*ar; }AutoReferencia; intmain() { AutoReferenciaar1,ar2; ar1.ar=&sr2; ar2.ar=&sr1; ar1.i=47; ar2.i=1024 cout<<ar1.ar>i;//Qusale? }

i = 47 ar

i = 1024 ar

21

3.4ProgramacinEstructurada
Estructuras y Punteros
Para seleccionar un elemento de una estructura utilizamos '.' Si utilizamos un puntero: '->'
typedefstructStructure3 { charc; inti; floatf; }Structure3; intmain() { Structure3s1,s2; Structure3*sp=&s1; sp>c=a;//Igualques1.c sp>i=1; sp>f=3.14; sp=&s2;//Cambiamos sp>c=a; }

sp

s1 char c ...

s2 char c ...

22

3.4ProgramacinEstructurada
Arrays o Vectores
Permiten agrupar variables una a continuacin de la otra. Todas del mismo tipo.
intmain() { inta[10]; for(inti=0;i<10;i++) { a[i]=i*10; cout<<"a["<<i<<"]="<<a[i]<<endl; } } ThreeDpointp[10]; for(inti=0;i<10;i++) { p[i].i=i+1;//Dos'i'dif. p[i].j=i+2; p[i].k=i+3; } typedefstruct { inti,j,k; }ThreeDpoint;

Accesos muy rpidos. Si indexamos ms all de los lmites: Problemas. No se comprueban los lmites en compilacin. Hay que definir el tamao en tiempo de compilacin. 23

3.4ProgramacinEstructurada
Punteros y Arrays
El nombre de un array sin los corchetes ([x]) nos da la direccin del 1er elemento. No podemos asignarle algo al nombre del array. a[10] .... a=33;
intmain() { inta[10]; cout<<"a="<<a<<endl; cout<<"&a[0]="<<&a[0]<<endl; } intarray1[5],array2[9]; intmain(intargc,char*argv[]) { cout<<"argc="<<argc<<endl; for(inti=0;i<argc;i++) cout<<"argv["<<i<<"]=" <<argv[i]<<endl; } func2(array1,5); func2(array2,9); voidfunc2(int*a,intsize) { for(inti=0;i<size;i++) a[i]=i*i+i; }

24

3.4ProgramacinEstructurada
Aritmtica de Punteros
Lo ms comn es incrementar un puntero en n o en 1 (++). No tiene mucho sentido sumar dos punteros. Y restarlos?
intmain() { inti[10]; doubled[10]; int*ip=i; double*dp=d; cout<<"ip=" ip++; cout<<"ip=" cout<<"dp=" dp++; cout<<"dp=" } ip=6684124 ip=6684128 dp=6684044 dp=6684052

25

3.5Resumen
Estndares Reutilizando Funciones argumentos Control de Flujo if,while,for mbito de Validez Globales, locales static

Programacin Estructurada
Operadores +,--,&&,>> Casting i = (int)l; Tipos de Datos char, int, short int Punteros int* , void* Constantes const int i=0; Almacenamiento Heap, Global Estruturas struct Arrays int a[10];

26

You might also like