You are on page 1of 8

UNIVERSIDAD DON BOSCO

FACULTAD DE ESTUDIOS TECNOLÓGICOS


ESCUELA DE COMPUTACION
GUIA DE LABORATORIO #11
Nombre de la Practica: POO en C++: Constructores y Destructores
Lugar de Ejecución: Centro de Computo
CICLO: 01/ 2012
Tiempo Estimado: 2 horas y 30 minutos
MATERIA: Introducción a la Programación

I. OBJETIVOS

Que el alumno sea capaz de:


• Definir nuevos objetos en C++, basados en clases.
• Comunicar dos o más objetos diferentes.

II. INTRODUCCION TEORICA


MIEMBROS Y METODOS
Las clases están compuestas por miembros (atributos, campos o propiedades) que describen
las características de la clase y métodos que describen el comportamiento del objeto que se
modela dentro de una clase.
Los miembros no son más que variables que se declaran dentro de la clase y estas pueden ser
publicas, privadas o protegidas. Los métodos describen como se comporta la clase y se definen
como funciones, como ya se vio en la guía anterior.
Los métodos se pueden declarar también como públicos, privados o protegidos. Cuando se
declaran en la parte pública 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 mayoría de las clases es necesario dar valores iniciales a sus miembros (constructor) y
liberar memoria al finalizarlos (destructor). Para ello se utilizan los métodos constructor y
destructor.
El método constructor será miembro público cuyo nombre es el mismoque el de la clase, sin
devolver nada.Puede llevar parámetros,

1
El método destructor será un miembro con el mismo nombre de la clase con el prefijo ~, sin
devolver nada, ni siquiera void.

Constructor
Dentro del método constructor se pueden inicializar los miembros de la clase con un valor por
defecto o un valor que se recibe como parámetro al momento de la creación del objeto. Por
ejemplo:

Para el ejemplo anterior en el método 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 envíen
como parámetros a la hora de inicializar el objeto. Por ejemplo:
Complejo c(10,2), com;
El objeto c se inicializa con valores que se envían como argumentos al método constructor, en
cambio el objeto com se inicializará con los valores por defecto 0 y 1.

Destructor
El método 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 símbolo (~).

2
III. MATERIALES Y EQUIPO

Para la realización de la guía de práctica se requerirá lo siguiente:

No. Requerimiento Cantidad


1 Guía de Laboratorio # 11 de IP 1
2 Compilador de C++. 1
3 Disquete ó Memoria USB 1

IV. PROCEDIMIENTO

Redacte, pruebe y analice los siguientes códigos fuentes.

Ejercicio 1. Implementación del método 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.

#include <iostream>
#include <stdlib.h>

using namespace std;

class Cuadrante //definicion clase Cuadrante


{
public:
//Constructor
Cuadrante(float x=0, float y=0){
X=x;
Y=y;
}
//Destructor
~Cuadrante(){};

void vercuadrante();//metodo publico

private:
float X, Y;
};

main(){

3
float x,y;
cout<<"\t-->Ingrese el punto (x,y):\n" ;
cin>>x>>y;
//Inicializamos el objeto y enviamos x y y
Cuadrante xy(x,y);
cout<<"El punto ("<<x<<","<<y<<") se encuentra en: ";
xy.vercuadrante();
system("pause");
}//fin funcion principal

//definicion de cada metodo de clase Cuadrante

void Cuadrante::vercuadrante(){
//verificamos los puntos
//para ubicar la coordenada
if ((X>0) && (Y>0))
cout<<"I Cuadrante"<<endl;
else if ((X>0) && (Y<0))
cout<< "II Cuadrante"<<endl;
else if ((X<0) && (Y<0))
cout<< "III Cuadrante"<<endl;
else if ((X<0) && (Y>0))
cout<< "IV Cuadrante"<<endl;
else if ((X==0) && (Y==0))
cout<< "Origen"<<endl;
else if ((X==0) && (Y!=0))
cout<< "Eje Y"<<endl;
else if ((X!=0) && (Y==0))
cout<< "Eje X"<<endl;
}//fin metodo vercuadrante

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.
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;

class Factura{
public:
void newFactura();
Factura();//Constructor

private:
//atributos privados
char cliente[30];
char vendedor[30];

4
char fecha[10];
float monto;
int cantProd;
//metodos privados
void setCliente();
void setVendedor();
void setFecha();
void getCliente();
void getVendedor();
void getfecha();
}; //fin clase Factura

class Detalle{
private:
float cantidad, precio;
float IVA;
char producto[20];
public:
Detalle(float _iva=0.13){//Constructor
IVA=_iva;
};
float getIva();
float getTotal();
void setCantidad();
void setPrecio();
void setProducto();
float getCantidad();
float getPrecio();
void getProducto();
};//fin clase Detalle

main(){
Factura f; //objeto f de la clase Factura
f.newFactura();
system("pause");

}//fin funcion principal main

//definicion del cuerpo de c/metodo de ambas clases

Factura::Factura(){//Método constructor
cantProd=0;
monto=0;

void Factura::newFactura(){
char resp;
setVendedor();
setCliente();
setFecha();

5
Detalle det[100]; //arreglo de 100 objetos clase Detalle
do{
system("cls");
cout<<"\nIngrese la descripción del producto No:
"<<cantProd+1<<endl;
det[cantProd].setProducto();
det[cantProd].setCantidad();
det[cantProd].setPrecio();
cantProd++;
cout<<"\nPresione <ENTER> para otro producto";
resp=getche();

}while(resp==13);
system("cls");

cout<<"\nFecha:\t"<<fecha;
cout<<"\nVendedor:\t"<<vendedor;
cout<<"\nCliente:\t"<<cliente;

cout<<"\n___________________________________________
______________\n";
cout.setf(ios::fixed);
cout.setf(ios::showpoint);
cout.precision(2);
for(int i=0;i<cantProd;i++){
cout<<endl;
cout<<i+1<<"\t";
det[i].getProducto();

cout<<"\t\t\t"<<det[i].getCantidad()<<"\t"<<det[i].getPrecio(
);
cout<<"\t"<<det[i].getIva()<<"\t"<<det[i].getTotal();
monto+=det[i].getTotal();

}
cout<<endl<<endl;
cout<<"\t\tTotal a pagar: $"<<monto<<endl<<endl;
}

void Factura::setVendedor(){
cout<<"\n-->Ingrese el nombre del vendedor: ";
cin.getline(vendedor,30);
}

void Factura::setCliente(){
cout<<"\n-->Ingrese el nombre del cliente: ";
cin.getline(cliente,30);
}

void Factura::setFecha(){
cout<<"\n-->Ingrese la fecha: ";

6
cin.getline(fecha,10);
}
void Detalle::setProducto(){
do{
cout<<"\n\t-->Ingrese nombre de producto: ";
cin.getline(producto,30);
}while(strlen(producto)==0);
}
void Detalle::setCantidad(){
do{
cout<<"\n\t-->Ingrese cantidad de "<<producto<<" a
adquirir: ";
cin>>cantidad;
}while(cantidad<=0);
}
void Detalle::setPrecio(){
do{
cout<<"\n\t-->Ingrese precio: ";
cin>>precio;
}while(precio<0);
}
float Detalle::getIva(){
return precio*cantidad*IVA;
}
float Detalle::getTotal(){
return precio*cantidad+getIva();
}
void Detalle::getProducto(){
cout<<producto;
}
float Detalle::getCantidad(){
return cantidad;
}
float Detalle::getPrecio(){
return precio;
}

V. DISCUSION DE RESULTADOS

1. Crear una clase profesor con los miembros, nombre y materia y un método público 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 métodos necesarios para manejar los depósitos y retiros
de cuenta. Además, que se pueda ver a) el total de depósitos en todas las cuentas, b) El
reporte de estado de cuenta para un ahorrante en específico, ingresando el número de
cuenta.

7
VII. BIBLIOGRAFIA
• Metodología de la Programación: Diagramas de Flujo, Algoritmos y Programación
estructurada. Joyanes Aguilar, Luis. No. De Clasificación 005.1 J88 1998. Editorial:
MCGRAW HILL
• Cómo Programar en C/C++. Deitel, Harvey M... No. De Clasificación 005.362 D325 1995
Editorial: PRENTICE HALL

You might also like