Tema: Clases y Objetos en C++. Parte II.

Anuncio
Programación II. Guía 4
1
Facultad:
Ingeniería
Escuela:
Computación
Asignatura: Programación II
Tema: Clases y Objetos en C++. Parte II.
Objetivos
Específico
Implementar clases, objetos, propiedades, métodos y mensajes.
Crear, analizar y comprender cuando utilizar las clases.
Crear constructores y destructores de clases.
Materiales y Equipo
• Computadora con el software DevC++
• Guía Número 4
Introducción
En esta práctica se tratarán los niveles de acceso, constructores y destructores para la
definición de clases y creación de objetos.
Los métodos constructor y destructor.
El método constructor es un método muy diferente de todos los demás. En primer lugar, su
nombre coincide siempre con el de la clase a la que pertenece, se ejecuta automáticamente al
declarar un objeto como instancia de una clase; se escribe generalmente en la sección pública
de una clase, y su función es crear e iniciar un objeto del tipo de la clase en la cual fue definido.
De esta manera, los constructores permiten asegurar que los objetos, al crearse, se inicialicen
con valores válidos.
Además, un constructor no es ni un procedimiento ni una función, y por lo tanto no tiene
asociado ningún tipo de retorno (ni siquiera void). Por último, el usuario nunca invoca un
constructor de manera explícita. Esto no tendría sentido, pues de lo que se trata es de que los
objetos sean inicializados de manera implícita por C++, sin intervención alguna por parte del
usuario. Por ello, el constructor de una clase es invocado automáticamente justo después de
cada declaración un objeto de esa clase.
2
Programación II, Guía 4
Sintaxis para la definición del método constructor:
<nombre de clase> (<listado de parámetros>)
{
cuerpo del constructor
}
ó
<nombre de clase> ( ) {
}
El método destructor es una función que se ejecuta automáticamente al destruirse un objeto.
Lleva el mismo nombre de la clase, va precedido por el símbolo “~“ y no lleva argumentos. Un
objeto se destruye al terminar el programa en el cual se creó y libera el espacio de memoria.
En el caso de objetos locales, éstos se destruyen al dejar la sección en la cual se crearon.
Además, el usuario nunca debe ejecutar un destructor de forma explícita. Los destructores son
invocados automáticamente por C++ cada vez que un objeto deja de existir.
Los destructores se emplean típicamente en clases cuyos objetos tienen asociados recursos
que se deben devolver al sistema.
Cuando se define un destructor para una clase, éste es llamado automáticamente cuando se
abandona el ámbito en el que fue definido. Esto es así salvo cuando el objeto fue creado
dinámicamente con el operador new, ya que en ese caso, cuando es necesario eliminarlo, hay
que hacerlo explícitamente usando el operador delete.
En general, será necesario definir un destructor cuando nuestra clase tenga datos miembro de
tipo puntero, aunque esto no es una regla estricta.
Sintaxis para la definición del método destructor:
~ <nombre de clase> ( ){
}
Uso de constructores múltiples
últiples.
últiples
C++ utiliza las capacidades de sobrecarga de funciones de para que una clase tenga varios
constructores.
Los constructores múltiples hacen referencia a que en una misma clase se puede incluir más
de un constructor. Esto permite dar mayor flexibilidad a la declaración de la clase.
Programación II. Guía 4 3
Existen tres tipos de constructores:
•
Constructor por omisión: es aquel que no tiene parámetros y su cuerpo no contiene
instrucciones. Cuando se crea un objeto, si éste es global, el constructor inicializa con
cero aquellos atributos que son numéricos y con NULL a los que son alfabéticos. Si el
objeto creado es local, entonces los atributos se inicializan en valores determinados.
•
Constructor con parámetros: es aquel que tiene una lista de parámetros, a los
cuales habrá que darles un valor en el momento de declarar un objeto. Dichos valores
se usarán para instanciar los atributos del objeto creado.
•
Constructor con parámetros por omisión: es aquel que tiene una lista de
parámetros, a los cuales se les asigna un valor por omisión que se usará para
inicializar en caso de que no se den explícitamente otros valores.
Se llama constructor de oficio al constructor por defecto que define automáticamente el
compilador si el usuario no define ningún constructor.
Si bien todo constructor de oficio es constructor por defecto (ya que no tiene argumentos), lo
contrario no es cierto: el programador puede definir constructores por defecto que no son de
oficio.
Importante: el compilador sólo crea un constructor de oficio en el caso de que el programador
no haya definido ningún constructor. En caso de que sólo se haya definido un constructor con
argumentos y se necesite un constructor por defecto para crear, por ejemplo un vector de
objetos, el compilador no crea este constructor por defecto sino que da un mensaje de error.
Todos los constructores llevan el nombre de la clase a la cual pertenecen. La existencia o no
de parámetros decide a qué tipo de constructor se está llamando. Es importante mencionar
que los constructores por omisión y con parámetros por omisión no pueden convivir en una
misma clase, ya que resultaría ambiguo a cual se estaría invocando en el caso de no
proporcionar parámetros.
Procedimiento
Ejemplo 1:
4
Programación II, Guía 4
En el siguiente programa se define un triángulo por medio de la longitud de su base y su altura.
Además se definen métodos para calcular su área, actualizar e imprimir sus atributos. Para la
clase “Triangulo” se definieron dos constructores: uno por omisión y otro con parámetros y
además un destructor.
#include <iostream>
using namespace std;
class Triangulo
{
private:
float Base, Altura;
public:
Triangulo( );
Triangulo(float, float);
~Triangulo( );
float CalculaArea( );
void ImprimeAtributos( );
void ActualizaAtributos(float, float);
};
// Declaración del método constructor por omisión
Triangulo::Triangulo( )
{
}
// Declaración del método constructor con parámetros
Triangulo::Triangulo(float B, float A)
{
Altura = A;
Base = B;
}
// Declaración del método destructor por omisión
Triangulo:: ~Triangulo( )
{
}
cout << “ Se esta destruyendo el objeto. \n \n”;
Programación II. Guía 4 5
//Método que calcula el área de un triángulo.
float Triangulo::CalculaArea( )
{
return (Base * Altura / 2);
}
//Método que despliega los valores de los atributos.
void Triangulo::ImprimeAtributos( )
{
cout << “ La base del triangulo es: Base = “ << Base << “\n”;
cout << “ La altura del triangulo es: Altura = “ << Altura << “\n”;
}
//Método que modifica los valores de la base y de la altura de un triángulo.
void Triangulo::ActualizaAtributos(float B, float A)
{
Altura = A;
Base = B;
}
int main( )
{ float ValorAlt, ValorBase;
Triangulo ObjT1; /* Se declara un objeto hacienda uso del constructor por omisión. En este
caso, la base y la altura permanecen con valores indefinidos */
ValorBase = 2.6;
ValorAlt = 3.7;
// Se le asignan valores a la base y a la altura del triángulo
ObjT1.ActualizaAtributos(ValorBase, ValorAlt);
Triangulo ObjT2 (2.8, 9.0); /* Se declara un objeto hacienda uso del constructor con
parámetros. En este caso se le asigna a la base el valor de
2.8 y a la altura el valor de 9.0 */
/* Se imprimen los atributos de ambos triángulos, luego se calcula el área de cada uno de
ellos y finalmente se destruye cada objeto */
ObjT1.ImprimeAtributos( );
6
Programación II, Guía 4
cout << “ y su area es: “ << ObjT1.CalculaArea( );
ObjT1. ~Triangulo( );
ObjT2.ImprimeAtributos( );
cout << “ y su area es: “ << ObjT2.CalculaArea( );
ObjT2. ~Triangulo( );
system(“pause”);
return 0;
}
Análisis de Resultados
Ejercicio 1:
Tomar el código anterior como referencia y realizar los cambios que sean necesarios para
crear un programa que a través de un menú permita realizar las siguientes funciones:
a) Crear objetos de tipo triángulo. Deberá solicitarse al usuario que tipo de triángulo se
desea crear: Equilátero, Isósceles o Escaleno. (Es decir que debe modificarse la clase
de tal manera que los objetos posean además de base y altura, los valores de los tres
lados del triángulo)
b) En cualquier momento modificar los atributos de los objetos.
c) Calcular el área de un objeto en particular, de dos maneras (considerar que según el
tipo de triángulo, existe una fórmula para calcular su área).
d) Calcular el perímetro de un objeto en particular (considerar que según el tipo de
triángulo, existe una fórmula para calcularlo).
e) Salir del programa.
Programación II. Guía 4 7
Investigación
Implementa la siguiente clase para representar un reloj digital:
class CReloj
{
private:
int horas, minutos, segundos;
int bateria;
// cada tic-tac consume una unidad de energía
public:
CReloj(int h, int m, int s, int b);
void tic_tac( );
void avanza(int h, int m, int s);
void atrasa(int h, int m, int s);
bool esta_parado( );
void recarga_bateria(int b);
void hora_en_formato_12h( );
void hora_en_formato_ 24( );
};
Escribir un programa que a través de un menú permita manipular un reloj digital.
8
Programación II, Guía 4
Guía 4: Clases y Objetos en C++.
Parte II.
Hoja de cotejo:
Alumno:
Máquina No:
Docente:
GL:
Fecha:
1-4
5-7
8-10
Conocimiento
deficiente de
los fundamentos
teóricos
Conocimiento
y explicación
incompleta de
los
fundamentos
teóricos
Conocimiento
completo y
explicación
clara de los
fundamentos
teóricos
No tiene
actitud
proactiva.
Actitud
propositiva y
con
propuestas no
aplicables al
contenido de
la guía.
Tiene actitud
proactiva y
sus
propuestas
son
concretas.
4
1
EVALUACIÓN
%
CONOCIMIENTO
Del 20
al 30%
APLICACIÓN
DEL
CONOCIMIENTO
Del 40%
al 60%
ACTITUD
Del 15%
al 30%
TOTAL
100%
Nota
Descargar