index.htm

RECETAS DE NAVIDAD

- apuntes comunicaciones javascript lenguaje c php autoayuda bolsa chistes empleo fotografia digital ocio sabiasque salud timos trucos

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 paso:
clases encapsulacion
Siguiente paso:
clases descomposicion en modulos

· Introduccion al lenguaje c
· Tipos en el lenguaje c
· Variables y constantes en el lenguaje c
· Operadores en el lenguaje c
· Entrada/salida en el lenguaje c
· Estructuras de control en el lenguaje c
· Arrays y punteros en el lenguaje c
· Reserva dinamica de memoria en el lenguaje c
· Funciones en el lenguaje c
· Estructuras en el lenguaje c
· Clases
· Clases y encapsulacion en el lenguaje c
· Constructores y destructores en el lenguaje c++
· Descomposicion en modulos en el lenguaje c
· Array de objetos en el lenguaje c
· Clases static en lenguaje c
· Un objeto con un puntero interno
· Punteros a clases en c
· Objetos encadenados en c
· Sobrecarga de operadores en el lenguaje c

IMPORTANTE:

- Si te ha gustado esta pagina, por favor, votanos aqui:

- Si no te ha gustado, escribenos y cuentanos en que mejorar.

Actualizado: 16/12/2013