FACULTAD DE ESTUDIOS TECNOLGICOS ESCUELA DE COMPUTACION CICLO: 01/ 2012 GUIA DE LABORATORIO #11 Nombre de la Practica: POO en C++: Constructores y Destructores Lugar de Ejecucin: Centro de Computo Tiempo Estimado: 2 horas y 30 minutos MATERIA: Introduccin a la Programacin
I. OBJETIVOS
Que el alumno sea capaz de: Definir nuevos objetos en C++, basados en clases. Comunicar dos o ms objetos diferentes.
II. INTRODUCCION TEORICA MIEMBROS Y METODOS Las clases estn compuestas por miembros (atributos, campos o propiedades) que describen las caractersticas de la clase y mtodos que describen el comportamiento del objeto que se modela dentro de una clase. Los miembros no son ms que variables que se declaran dentro de la clase y estas pueden ser publicas, privadas o protegidas. Los mtodos describen como se comporta la clase y se definen como funciones, como ya se vio en la gua anterior. Los mtodos se pueden declarar tambin como pblicos, privados o protegidos. Cuando se declaran en la parte pblica se utilizan para la interfaz de uso del objeto y en la parte privada, se utiliza para los procedimientos internos necesarios para el funcionamiento del objeto.
METODOS CONSTRUCTOR Y DESTRUCTOR En la mayora de las clases es necesario dar valores iniciales a sus miembros (constructor) y liberar memoria al finalizarlos (destructor). Para ello se utilizan los mtodos constructor y destructor. El mtodo constructor ser miembro pblico cuyo nombre es el mismoque el de la clase, sin devolver nada.Puede llevar parmetros,
2
El mtodo destructor ser un miembro con el mismo nombre de la clase con el prefijo ~, sin devolver nada, ni siquiera void.
Constructor Dentro del mtodo constructor se pueden inicializar los miembros de la clase con un valor por defecto o un valor que se recibe como parmetro al momento de la creacin del objeto. Por ejemplo:
Para el ejemplo anterior en el mtodo constructor se inicializan los miembros privados realyimag con un valor por defecto (0 y 1) que se asignar en el caso de que no se enven como parmetros a la hora de inicializar el objeto. Por ejemplo: Complejo c(10,2), com; El objeto c se inicializa con valores que se envan como argumentos al mtodo constructor, en cambio el objeto com se inicializar con los valores por defecto 0 y 1.
Destructor El mtodo destructor no siempre hace falta, solo cuando se llame a rutinas que modifiquen el estado del sistema y antes de destruir el objeto haya que reponer ese estado. Se crea dentro de la clase anteponiendo al nombre el smbolo (~).
3
III. MATERIALES Y EQUIPO
Para la realizacin de la gua de prctica se requerir lo siguiente:
No. Requerimiento Cantidad 1 Gua de Laboratorio # 11 de IP 1 2 Compilador de C++. 1 3 Disquete Memoria USB 1
IV. PROCEDIMIENTO
Redacte, pruebe y analice los siguientes cdigos fuentes.
Ejercicio 1. Implementacin del mtodo constructor para inicializar miembros del objeto Desarrolle una clase que permita identificar el cuadrante donde se encuentra un punto (x,y) en el plano cartesiano. La clase retornar una cadena de caracteres especificando el cuadrante al que pertenece el punto.
# i n c l u d e < i o s t r e a m > # i n c l u d e < s t d l i b . h >
u s i n g n a m e s p a c e s t d ;
c l a s s C u a d r a n t e / / d e f i n i c i o n c l a s e C u a d r a n t e { p u b l i c : / / C o n s t r u c t o r C u a d r a n t e ( f l o a t x = 0 , f l o a t y = 0 ) { X = x ; Y = y ; } / / D e s t r u c t o r ~ C u a d r a n t e ( ) { } ;
v o i d v e r c u a d r a n t e ( ) ; / / m e t o d o p u b l i c o
p r i v a t e : f l o a t X , Y ; } ;
m a i n ( ) { 4
f l o a t x , y ; c o u t < < " \ t - - > I n g r e s e e l p u n t o ( x , y ) : \ n " ; c i n > > x > > y ; / / I n i c i a l i z a m o s e l o b j e t o y e n v i a m o s x y y C u a d r a n t e x y ( x , y ) ; c o u t < < " E l p u n t o ( " < < x < < " , " < < y < < " ) s e e n c u e n t r a e n : " ; x y . v e r c u a d r a n t e ( ) ; s y s t e m ( " p a u s e " ) ; } / / f i n f u n c i o n p r i n c i p a l
/ / d e f i n i c i o n d e c a d a m e t o d o d e c l a s e C u a d r a n t e
v o i d C u a d r a n t e : : v e r c u a d r a n t e ( ) { / / v e r i f i c a m o s l o s p u n t o s / / p a r a u b i c a r l a c o o r d e n a d a i f ( ( X > 0 ) & & ( Y > 0 ) ) c o u t < < " I C u a d r a n t e " < < e n d l ; e l s e i f ( ( X > 0 ) & & ( Y < 0 ) ) c o u t < < " I I C u a d r a n t e " < < e n d l ; e l s e i f ( ( X < 0 ) & & ( Y < 0 ) ) c o u t < < " I I I C u a d r a n t e " < < e n d l ; e l s e i f ( ( X < 0 ) & & ( Y > 0 ) ) c o u t < < " I V C u a d r a n t e " < < e n d l ; e l s e i f ( ( X = = 0 ) & & ( Y = = 0 ) ) c o u t < < " O r i g e n " < < e n d l ; e l s e i f ( ( X = = 0 ) & & ( Y ! = 0 ) ) c o u t < < " E j e Y " < < e n d l ; e l s e i f ( ( X ! = 0 ) & & ( Y = = 0 ) ) c o u t < < " E j e X " < < e n d l ; } / / f i n m e t o d o v e r c u a d r a n t e
Ejercicio 2. Creando arreglos de objetos dentro de una clase Desarrolle 2 clases diferentes, para relacionarlas entre si, y permitan elaborar una factura para N productos diferentes. # i n c l u d e < i o s t r e a m > # i n c l u d e < s t r i n g . h > # i n c l u d e < c o n i o . h > u s i n g n a m e s p a c e s t d ;
c l a s s F a c t u r a { p u b l i c : v o i d n e w F a c t u r a ( ) ; F a c t u r a ( ) ; / / C o n s t r u c t o r
p r i v a t e : / / a t r i b u t o s p r i v a d o s c h a r c l i e n t e [ 3 0 ] ; c h a r v e n d e d o r [ 3 0 ] ; 5
c h a r f e c h a [ 1 0 ] ; f l o a t m o n t o ; i n t c a n t P r o d ; / / m e t o d o s p r i v a d o s v o i d s e t C l i e n t e ( ) ; v o i d s e t V e n d e d o r ( ) ; v o i d s e t F e c h a ( ) ; v o i d g e t C l i e n t e ( ) ; v o i d g e t V e n d e d o r ( ) ; v o i d g e t f e c h a ( ) ; } ; / / f i n c l a s e F a c t u r a
c l a s s D e t a l l e { p r i v a t e : f l o a t c a n t i d a d , p r e c i o ; f l o a t I V A ; c h a r p r o d u c t o [ 2 0 ] ; p u b l i c : D e t a l l e ( f l o a t _ i v a = 0 . 1 3 ) { / / C o n s t r u c t o r I V A = _ i v a ; } ; f l o a t g e t I v a ( ) ; f l o a t g e t T o t a l ( ) ; v o i d s e t C a n t i d a d ( ) ; v o i d s e t P r e c i o ( ) ; v o i d s e t P r o d u c t o ( ) ; f l o a t g e t C a n t i d a d ( ) ; f l o a t g e t P r e c i o ( ) ; v o i d g e t P r o d u c t o ( ) ; } ; / / f i n c l a s e D e t a l l e
m a i n ( ) { F a c t u r a f ; / / o b j e t o f d e l a c l a s e F a c t u r a f . n e w F a c t u r a ( ) ; s y s t e m ( " p a u s e " ) ;
} / / f i n f u n c i o n p r i n c i p a l m a i n
/ / d e f i n i c i o n d e l c u e r p o d e c / m e t o d o d e a m b a s c l a s e s
F a c t u r a : : F a c t u r a ( ) { / / M t o d o c o n s t r u c t o r c a n t P r o d = 0 ; m o n t o = 0 ;
}
v o i d F a c t u r a : : n e w F a c t u r a ( ) { c h a r r e s p ; s e t V e n d e d o r ( ) ; s e t C l i e n t e ( ) ; s e t F e c h a ( ) ; 6
D e t a l l e d e t [ 1 0 0 ] ; / / a r r e g l o d e 1 0 0 o b j e t o s c l a s e D e t a l l e d o { s y s t e m ( " c l s " ) ; c o u t < < " \ n I n g r e s e l a d e s c r i p c i n d e l p r o d u c t o N o : " < < c a n t P r o d + 1 < < e n d l ; d e t [ c a n t P r o d ] . s e t P r o d u c t o ( ) ; d e t [ c a n t P r o d ] . s e t C a n t i d a d ( ) ; d e t [ c a n t P r o d ] . s e t P r e c i o ( ) ; c a n t P r o d + + ; c o u t < < " \ n P r e s i o n e < E N T E R > p a r a o t r o p r o d u c t o " ; r e s p = g e t c h e ( ) ;
} w h i l e ( r e s p = = 1 3 ) ; s y s t e m ( " c l s " ) ;
c o u t < < " \ n F e c h a : \ t " < < f e c h a ; c o u t < < " \ n V e n d e d o r : \ t " < < v e n d e d o r ; c o u t < < " \ n C l i e n t e : \ t " < < c l i e n t e ;
c o u t < < " \ n _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " ; c o u t . s e t f ( i o s : : f i x e d ) ; c o u t . s e t f ( i o s : : s h o w p o i n t ) ; c o u t . p r e c i s i o n ( 2 ) ; f o r ( i n t i = 0 ; i < c a n t P r o d ; i + + ) { c o u t < < e n d l ; c o u t < < i + 1 < < " \ t " ; d e t [ i ] . g e t P r o d u c t o ( ) ;
c o u t < < " \ t \ t \ t " < < d e t [ i ] . g e t C a n t i d a d ( ) < < " \ t " < < d e t [ i ] . g e t P r e c i o ( ) ; c o u t < < " \ t " < < d e t [ i ] . g e t I v a ( ) < < " \ t " < < d e t [ i ] . g e t T o t a l ( ) ; m o n t o + = d e t [ i ] . g e t T o t a l ( ) ;
} c o u t < < e n d l < < e n d l ; c o u t < < " \ t \ t T o t a l a p a g a r : $ " < < m o n t o < < e n d l < < e n d l ; }
v o i d F a c t u r a : : s e t V e n d e d o r ( ) { c o u t < < " \ n - - > I n g r e s e e l n o m b r e d e l v e n d e d o r : " ; c i n . g e t l i n e ( v e n d e d o r , 3 0 ) ; }
v o i d F a c t u r a : : s e t C l i e n t e ( ) { c o u t < < " \ n - - > I n g r e s e e l n o m b r e d e l c l i e n t e : " ; c i n . g e t l i n e ( c l i e n t e , 3 0 ) ; }
v o i d F a c t u r a : : s e t F e c h a ( ) { c o u t < < " \ n - - > I n g r e s e l a f e c h a : " ; 7
c i n . g e t l i n e ( f e c h a , 1 0 ) ; } v o i d D e t a l l e : : s e t P r o d u c t o ( ) { d o { c o u t < < " \ n \ t - - > I n g r e s e n o m b r e d e p r o d u c t o : " ; c i n . g e t l i n e ( p r o d u c t o , 3 0 ) ; } w h i l e ( s t r l e n ( p r o d u c t o ) = = 0 ) ; } v o i d D e t a l l e : : s e t C a n t i d a d ( ) { d o { c o u t < < " \ n \ t - - > I n g r e s e c a n t i d a d d e " < < p r o d u c t o < < " a a d q u i r i r : " ; c i n > > c a n t i d a d ; } w h i l e ( c a n t i d a d < = 0 ) ; } v o i d D e t a l l e : : s e t P r e c i o ( ) { d o { c o u t < < " \ n \ t - - > I n g r e s e p r e c i o : " ; c i n > > p r e c i o ; } w h i l e ( p r e c i o < 0 ) ; } f l o a t D e t a l l e : : g e t I v a ( ) { r e t u r n p r e c i o * c a n t i d a d * I V A ; } f l o a t D e t a l l e : : g e t T o t a l ( ) { r e t u r n p r e c i o * c a n t i d a d + g e t I v a ( ) ; } v o i d D e t a l l e : : g e t P r o d u c t o ( ) { c o u t < < p r o d u c t o ; } f l o a t D e t a l l e : : g e t C a n t i d a d ( ) { r e t u r n c a n t i d a d ; } f l o a t D e t a l l e : : g e t P r e c i o ( ) { r e t u r n p r e c i o ; }
V. DISCUSION DE RESULTADOS
1. Crear una clase profesor con los miembros, nombre y materia y un mtodo pblico que permita el ingreso de la lista de N alumnos y sus 3 notas. La clase deber mostrar: a) el cuadro de notas de todos los alumnos, b) el cuadro de honor, c) el promedio de notas o d) el listado de los alumnos con promedio por debajo del promedio general.
2. Crear una clase Banco la cual pueda manejar N cuentas de ahorro con los datos del ahorrante. Esta debe contener los mtodos necesarios para manejar los depsitos y retiros de cuenta. Adems, que se pueda ver a) el total de depsitos en todas las cuentas, b) El reporte de estado de cuenta para un ahorrante en especfico, ingresando el nmero de cuenta. 8
VII. BIBLIOGRAFIA Metodologa de la Programacin: Diagramas de Flujo, Algoritmos y Programacin estructurada. Joyanes Aguilar, Luis. No. De Clasificacin 005.1 J88 1998. Editorial: MCGRAW HILL Cmo Programar en C/C++. Deitel, Harvey M... No. De Clasificacin 005.362 D325 1995 Editorial: PRENTICE HALL