Sunteți pe pagina 1din 21

Programacin Orientada a Objetos usando

CONSTRUCTORES
DESTRUCTORES

Constructores

Mtodo de la clase cuyo objetivo es:


Pedir recursos al sistema para construir el objeto Generar y dar valores iniciales a los atributos de

un objeto al instanciar la clase.


Mtodo con el mismo nombre de la clase.

No posee valor de retorno


Se invoca al crear el objeto
Puede sobrecargarse Si en la clase NO se define un constructor, el compilador

proporciona uno por defecto.

Constructores
De Oficio Especfico

Por Defecto Con Parmetros

De Copia

Constructor de Oficio

Constructor proporcionado automticamente por el compilador. No posee parmetros.

Se invoca en el momento de la creacin de un objeto.


Inicializa los atributos del objeto a su valor por defecto:

0 0.0 false '\u0000 null

: : : : :

Enteros Reales Booleanos Caracteres Referencias

Constructor: De Oficio
En C++: En forma implcita: Fraccion f;
explcita: Fraccion *f= new Fraccion()
f:

f:

0 0 0 0

Constructor:

Especfico por Defecto

Constructor creado por el diseador de la clase. Anula el constructor de Oficio

1.- Por Defecto: Este constructor NO contiene parmetros y, su cdigo lee valores y/o los asigna a las varibales miembros C++
class Fraccion {
private: int num; int den; public: Fraccion(); : }; Fraccion::Fraccion() { num=0; den=1;

Constructor:

Especfico con Parmetros

Constructor creado por el diseador de la clase. Anula el constructor de Oficio

2.- Con Parmetros: Este constructor contiene parmetros y los asigna a las varibales miembros
class Fraccion { private: int num; int den; public: Fraccion(int, int); : }; Fraccion::Fraccion(int n, int d) { num=n; den=d; }

Ejemplo

Uso del constructor especfico: Fraccion(int,int)

1.2.3.-

Fraccion f(5,3);
Fraccion f= Fraccion(5,3); Fraccion *g; g=new Fraccion(2,5);

4.-

Fraccion V[100];

Ejemplo
Definicin de la clase Alumno con dos constructores especficos
class Alumno{ private: char nom[25]; int carrera; int ingreso; public: Alumno(); Alumno(char *n, int c, int a); void Asigna_nom(char x[]); void Asigna_carrera(int c); void Asigna_ingreso(int i); void Listar(); char * Obtener_nom(); int Obtener_carrera(); int Obtener_ingreso(); };

10

Ejemplo
Implementacin de constructores especficos para la clase Alumno:
Alumno::Alumno(){ strcpy(nom,NULL); ingreso=2005; carrera=511; } Alumno::Alumno(char *n, int c, int a){ strcpy(nom,n); ingreso=a; carrera=c; } void Alumno::Asigna_nom(char x[]){ strcpy(nom,x); } : :

11

Ejemplo
Uso de la clase Alumno:
#include <iostream.h> #include "CAlumno1.h" #include "IAlumnos1.h" void main(){ char nombre[25]; int carr; int ao; cout<<"Ingrese nombre del alumno"; cin.getline(nombre,80);

cout<<"Ingrese carrera: "; cin>>carr;


cout<<"Ingrese ao de ingreso"; cin>>ao; Alumno a(nombre,anio,carr); a.Listar();

12

Constructor de Copia

Uso Permite crear objetos inicializndolo a partir de otro objeto de la misma clase.

El compilador proporciona uno de oficio. Este constructor efecta una COPIA bit a bit de las variables miembro del objeto original a objeto destino.

13

Constructor de Copia

Ejemplos de uso
1.- Fraccion f(2,5); Fraccion g=f;
2.- Fraccion h(f);

f:

2 5

g:

2 5

3.- Un objeto es el valor de retorno de una funcin: Fraccion Fraccion::Suma(Fraccion &f) { Fraccin c; ... return c; }

14

Constructor de Copia

Implementacin Este constructor tiene SLO un argumento que es una referencia constante a un objeto de la clase.

Fraccion (const Fraccion&);


Fraccion::Fraccion(const Fraccion &f) {num= f.num; den = f.den; }

15

Constructor de Copia
class Alumno{ private: char *nom; int carrera; int ingreso; public: Alumno(); Alumno(char *n, int c, int a); Alumno(const Alumno&); void Asigna_nom(char x[]); void Asigna_carrera(int c); void Asigna_ingreso(int i); void Listar(); char * Obtener_nom(); int Obtener_carrera(); int Obtener_ingreso(); };

16

Constructor de Copia
Alumno::Alumno(){ nom= new char[25]; strcpy(nom,NULL); ingreso=2005; carrera=2141; } Alumno::Alumno(char *n, int c, int a){ nom= new char[25]; strcpy(nom,n); ingreso=a; carrera=c; } Alumno::Alumno(const Alumno &x){ nom= new char[25]; strcpy(nom,x.nom); ingreso=x.ingreso; carrera=x.carrera; }

17

Inicializadores

Utilizados en los constructores Son ms eficientes que las asignaciones dentro del cdigo de un constructor. Son de gran utilidad : Para inicializar objetos contantes. En clases derivadas

Fraccion::Fraccion(int x,int y):num(x),den(y)


{ puede ir el cuerpo vaco } Variables miembros

18

DESTRUCTORES

19

Destructores
Mtodo complemento de los constructores No posee valor de retorno NO puede sobrecargarse, es nico

No posee argumentos. Tiene el mismo nombre de la clase con un tilde como prefijo:

~Clase ();
Clase::~Clase () { : }

20

Destructores

Es llamado implcitamente cuando un objeto va a dejar de existir.


Los objetos creados dinmicamente (new) deben eliminarse en forma explcita con delete. El compilador proporciona un destructor para variables estticas y/o automticas, excepto para liberar vectores y/o matrices: Clase::~Clase ()
{delete [] v;}

21

Tarea

Modifique la clase Alumno, de tal forma que:


Agregue variables miembro para registrar informacin sobre las asignaturas que un alumno debe cursar a lo largo de su carrera. Suponga que la malla curricular considera 72 asignaturas. Para cada asignatura cursada se deber registrar: Cdigo, ao, nota Considere la mxima cantidad de constructores. No olvide el destructor.

S-ar putea să vă placă și