Documentos de Académico
Documentos de Profesional
Documentos de Cultura
aboratorios:
Jos Luis Marina jmarina@nebrija.es Borland Builder 6.0 "#$ 20% !0% %&$ '&$ ,#$
%
P!nt!acin:
Prcticas Laboratorio: Diarias rabajo Laboratorio "#men Parcial "#men $inal ()*men +inal ()traordinario
.e-aso de +once-tos
0obrecar*a
De (-eradores De $unciones
)erencia.
i-os de 6isibilidad
)erencia M7lti-le
Polimor8ismo
$unciones 6irtuales Polimor8ismo 1 0obrecar*a.
Plantillas
+ontenedores
&teradores
.ectan*ulo
Rectangulo.cpp
test_Rectangulo.h
Los usuarios de la clase tienen acceso al header o 8icEero de cabecera o 8icEero de declaraci'n;nombreDclase.E< La de8inici'n de las 8unciones 1 o-eradores ;im-lementaci'n de la clase< se Eace en otro 8icEero 8uente al cual no es necesario acceder. Los detalles de este c'di*o -ueden ?uedar ocultos al usuario ;cliente< de la clase . Me -ueden dar acceso al 4.E5 1 en lu*ar del 4.c--5 al c'di*o objeto *enerado ;4.o5> 4.obj5> 4.lib5. 4.dll5<.
Rectangulo.h
.ectan*ulo
Rectangulo.cpp
test_Rectangulo.cpp
"l 8icEero nombreDclase.E se encierra en el si*uiente c'di*o de -re-rocesador: #ifndef NOMBRE_CLASE_H #define NOMBRE_CLASE_H ... #endif Las directi@as de -re-rocesador anteriores e@itan ?ue el c'di*o entre Hi8nde8 1 Hendi8 sea incluido si se Ea de8inido el nombre I(MB."D+L30"D)> es decir> si el encabe9ado Ea sido incluido -re@iamente en al*7n otro arcEi@o. La inclusi'n ;inad@ertida< del mismo arcEi@o sucede -or lo *eneral en -ro*ramas *randes con mucEos arcEi@os de cabecera
Podemos tener G0 clases en nuestro -ro*rama ?ue J recordemos J nos a1udan a @er mejor el -roblema ?ue tratamos de solucionar. "stas clases estarn en G0 8icEeros de cabecera 1 G0 de im-lementaci'n. 2nas clases Earn uso de otras ;cocEe 1 motor: +ocEe inclu1e Motor.E<
.ectan*ulo
- altura_: int - anchura_: int + + + + inicializar() altura(): int anchura(): int area(): int
+ altura(int) + anchura(int)
2.3 Estndares
Iombres de +lases> (bjetos> atributos 1 mtodos J &nde#ado 1 corcEetes
class Rectangulo { private: int int altura_; anchura_; Rectangulo* p_rec; ............ return 0; } int main(void) { Rectangulo mi_rectangulo; Rectangulo rectangulo_ejemplo;
public: void inicializar(void); int altura(void); int area(void); void altura(int alto); };
// ----------------------------------------------------------------------------void Rectangulo::altura(int alto) { if (alto > 0) { altura_ = alto; } else { altura_ = -1; } } %0
2.3 Estndares
+abeceras de los $icEeros:
/** * * * * * */ @author @date Jose Luis Marina <jlmarina@nebrija.es> 19-FEB-2007 @file @brief test_Rectangulo.cpp Pruebas sobre la clase Rectangulo. Ejemplo Metodos II
%%
2.3 Estndares
+omentarios de documentaci'n de atributos 1 metodos:
/// Altura del rectangulo en metros int /** * Devuelve el valor del area. * @retval Area en metros cuadrados y -1 en caso de error. */ int area(void); /** * Asigna valor a la altura del rectangulo. * Comprueba */ void altura(int alto); que el valor sea positivo. Anchura en metros. * @param alto altura_; // Comentario sobre la altura.
%2
2.3 Estndares
6entajas de los "stndares
31udan a .eutili9ar el c'di*o "l c'di*o reali9ado -or dos -ro*ramadores 4se -arece5. "s ms 8cil ?ue entendamos el c'di*o del otro 1 lo Earemos de 8orma ms r-ida. $acilitan la Documentaci'n Documentar un sistema -ara ?ue otros lo entiendan ;o 1o mismo dentro de un tiem-o< es -arte de la tarea de -ro*ramaci'n. 2n c'di*o incom-rensible es -oco: : Mantenible : 3m-liable : .eutili9able +ambios en los "stndares 0A> -ero de manera consensuada 1 a@isando al resto. ;M< 6er ejem-lo Do#1*en 1 .ectn*ulo
%C
&m-lementaci'n:
int translate(float x, float y, float z) { x = y = z; } int translate(float , float , float ) { } // Incorrecto. // Correcto
%F
%G
3dems con nuestro c'di*o se enla9ar el c'di*o objeto adecuado: .lib .a .o :N "nla9ado esttico .dll .so :N Dinmico
%6
%K
La e#-resi'n se e@alua una @e9 al comien9o del bucle 1 cada @e9 antes de cada iteraci'n de la sentencia
int main() { int secreto = 15; int apuesta = 0; // "!=" Diferente de while(guess != secret) { cout << "Adivina el numero: "; cin >> apuesta; } cout << "Lo adivinaste!" << endl; }
%!
%L
20
2%
Precedencia
"n una misma sentencia -uedo utili9ar @arios o-eradores: A = X + Y - 2/2 + Z; +omo re*la *eneral: : La multi-licaci'n 1 la di@isi'n se ejecutan antes ?ue la suma 1 la resta. : 0i no se entiende bien usa los -arntesis. A = X + (Y - 2)/(2 + Z);
22
(-eradores .elacionales
Menor ?ue :S Ma1or ?ue :N Menor o i*ual ?ue : SQ Ma1or o i*ual ?ue : NQ "?ui@alente : QQ Io e?ui@alente : TQ 0e -ueden utili9ar -ara todos los ti-os -rede8inidos de +,,. Podemos de8inir su com-ortamiento -ara ti-os o clases creadas -or nosotros. "sto es sobrecar*a de o-eradores. if (rectangulo_a == rectangulo_b) ...
(-eradores L'*icos
3ID : UU (. : VV
2C
(-eradores 2narios
Iot :: "l ms unario no Eace nada ; # Q ;,a<< &ncremento : ,, Decremento : :: +uidado con los -unterosTT Direcci'n de :U De8erencia : M 1 :N
2F
26
2K
2!
/* Maximum value an `unsigned short int' can hold. # define USHRT_MAX 65535
/* Minimum and maximum values a `signed int' can hold. # # define INT_MIN define INT_MAX (-INT_MAX - 1) 2147483647
*/
(Minimum is 0.)
*/
2L
0e -ueden de8inir @ariables en cual?uier sitio en un mbito determinado> 1 -odemos de8inirlas e iniciali9arlas al mismo tiem-o.
// Solo definicion: char proteina; int carbohidratos; float fibra; double grasa; // Definicion e inicializacion: char pizza = A, palomitas = Z; int ganchitos = 100, almendras = 150, pipas = 200; float chocolate = 3.14159; // Notacin exponencial: double hamburgesa = 6e-4; // Seis por diez elevado a cuatro
C0
C%