210 likes | 429 Views
Programación Orientada a Objetos usando. CONSTRUCTORES DESTRUCTORES. Constructores. Método 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.
E N D
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES
Constructores • Método 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. • Método 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 • Específico • Por Defecto • Con Parámetros • De Copia
Constructor de Oficio • Constructor proporcionado automáticamente por el compilador. • No posee parámetros. • Se invoca en el momento de la creación de un objeto. • Inicializa los atributos del objeto a su valor por defecto: • 0 : Enteros • 0.0 : Reales • false : Booleanos • '\u0000 : Caracteres • null : Referencias
f: 0 0 • En C++: En forma implícita: Fraccion f; explícita: Fraccion *f= new Fraccion() f: 0 0 Constructor: De Oficio
Constructor: Específico por Defecto • Constructor creado por el diseñador de la clase. • Anula el constructor de Oficio 1.- Por Defecto: Este constructor NO contiene parámetros y, su código lee valores y/o los asigna a las varibales miembros class Fraccion { private: int num; int den; public: Fraccion(); : }; Fraccion::Fraccion() { num=0; den=1; } } C++
Constructor: Específico con Parámetros • Constructor creado por el diseñador de la clase. • Anula el constructor de Oficio 2.- Con Parámetros: Este constructor contiene parámetros 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 específico: Fraccion(int,int) 1.- Fraccion f(5,3); 2.- Fraccion f= Fraccion(5,3); 3.- Fraccion *g; g=new Fraccion(2,5); 4.- Fraccion V[100];
Ejemplo Definición de la clase Alumno con dos constructores específicos 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(); };
Ejemplo Implementación de constructores específicos 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); } : :
Ejemplo Uso de la clase Alumno: #include <iostream.h> #include "CAlumno1.h" #include "IAlumnos1.h" void main(){ char nombre[25]; int carr; int año; cout<<"Ingrese nombre del alumno"; cin.getline(nombre,80); cout<<"Ingrese carrera: "; cin>>carr; cout<<"Ingrese año de ingreso"; cin>>año; Alumno a(nombre,anio,carr); a.Listar(); }
Constructor de Copia • Uso Permite crear objetos inicializándolo a partir de otro objeto de la misma clase. • El compilador proporciona uno de oficio. Este constructor efectúa una COPIA bit a bit de las variables miembro del objeto original a objeto destino.
2 2 f: g: 5 5 Constructor de Copia • Ejemplos de uso 1.- Fraccion f(2,5); Fraccion g=f; 2.- Fraccion h(f); 3.- Un objeto es el valor de retorno de una función: Fraccion Fraccion::Suma(Fraccion &f) { Fracción c; ... return c; }
Constructor de Copia • Implementación Este constructor tiene SÓLO 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; }
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(); };
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; }
Fraccion::Fraccion(int x,int y):num(x),den(y) { puede ir el cuerpo vacío } Variables miembros Inicializadores • Utilizados en los constructores • Son más eficientes que las asignaciones dentro del código de un constructor. • Son de gran utilidad : • Para inicializar objetos contantes. • En clases derivadas
Destructores • Método 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 () { : }
Destructores • Es llamado implícitamente cuando un objeto va a dejar de existir. • Los objetos creados dinámicamente (new) deben eliminarse en forma explícita con delete. • El compilador proporciona un destructor para variables estáticas y/o automáticas, excepto para liberar vectores y/o matrices: Clase::~Clase () {delete [] v;}
Tarea • Modifique la clase Alumno, de tal forma que: • Agregue variables miembro para registrar información 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: Código, año, nota • Considere la máxima cantidad de constructores. • No olvide el destructor.