gratiszona

constructores y destructores en el lenguaje C++

Constructores.
Cuando creamos un objeto de una clase, siempre seguimos los mismos pasos para llamar a un conjunto de metodos que inicializen los datos del objeto. En EL LENGUAJE C++, se define una funcion especial, el constructor, que es llamada cuando se crea un nuevo objeto de la clase. Este constructor puede recibir parametros, como cualquier otra funcion. Veamos un ejemplo de clase sin constructor y con constructor:
# include <iostream.h>
class Caja {
double longitud, anchura, altura;
public:
Caja (double dim1, double dim2, double dim3);
double volumen (void);
};
Caja:: Caja (double dim1, double dim2, double dim3) {
longitud = dim1;
anchura = dim2;
altura = dim3;
};
double Caja:: volumen (void) {
return longitud * anchura * altura;
};
main () {
Caja pequeña(5, 4, 10), mediana (10, 6, 20), grande(20, 10, 30);
cout << 'El volumen de la caja grande es ' << grande.volumen() << '\n';
}
En este sencillo ejemplo vemos las caracteristicas mas importantes de un constructor:
· El constructor tiene el mismo nombre que la clase a la que pertenece. Por ejemplo, el constructor de la clase Caja se llama Caja.
· El constructor no devuelve nada (ni siquiera void).
· Los argumentos se pasan al constructor en la declaracion de un objeto. Asi, Caja pequeña(5, 4, 10) crea un nuevo objeto de la clase Caja y llama al constructor con los parametros 5, 4 y 10.
Cuando se crea un objeto de una clase, se llama automaticamente al constructor. Si tuviesemos un puntero a una clase, su constructor no seria llamado a menos que reservaramos memoria para lo que apunta el puntero, utilizando new.
Un constructor es una funcion, y por tanto podemos aplicarle todo lo que hemos visto que las funciones EN EL LENGUAJE C++ pueden hacer. Por ejemplo, podemos sobrecargarlo:
# include <iostream.h>
class Caja {
double longitud, anchura, altura;
public:
Caja (double dim1, double dim2, double dim3);
Caja (void);
double volumen (void);
};
Caja:: Caja (void) {
longitud = 8;
anchura = 8;
altura = 8;
};
Hemos creado una funcion constructora que inicializa las dimensiones de la caja a 8. Esta sera llamada cuando creemos un objeto del tipo Caja sin ningun parametro.
Destructores.
El destructor es muy similar al constructor, excepto que es llamado automaticamente cuando cada objeto sale de su ambito de validez. Recordemos que las variables automaticas tienen un tiempo de vida limitado, ya que dejan de existir cuando se sale del bloque en que han sido declaradas. Cuando un objeto es liberado automaticamente, su destructor, si existe, es llamado automaticamente.
Un destructor tiene el mismo nombre que la clase a la que pertenece, pero precedido con una tilde (~). Igual que el constructor, un destructor no devuelve nada.
Si algun bloque de memoria fue reservado dinamicamente en un objeto, se puede utilizar el destructor para liberarlo antes de que se pierdan los punteros a esas variables.
#include <iostream.h>
class Taco {
public:
Taco (int hard) {
dureza = new int;
*dureza = hard;
}
~Taco() {
cout << 'Destruyendo taco con dureza ' ;
cout << *dureza <<;\n';
delete dureza;
}
private:
int *dureza;
};
main () {
Taco hard(10);
Taco *soft = new Taco (0);
delete soft;
};
En este ejemplo, vemos que el destructor tiene el mismo nombre que la clase, con un ~ delante. Cuando se crean punteros a clases, como soft en el ejemplo, se llama al destructor cuando se libera la memoria del puntero. Si esto no se hace, nunca se llamara al destructor.
Con clases declaradas estaticamente, como Taco hard, el destructor se llama al final de la funcion donde se declara el objeto (en el ejemplo, al final de la funcion main.
Incluso cuando se interrumpe un programa usando una llamada a exit(), se llama a los destructores de los objetos que existen en ese momento.

Anterior: clases encapsulacion
Siguiente: clases descomposicion en modulos

Tal vez te interese sobre lenguaje c: