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: () {

cuerpo del constructor

} ó ( ) { }

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: ~ ( ){ }

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 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