Programacin Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES NVA
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES NVA - LNG II
2 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.
3 Constructores De Oficio ► Específico ► § Por Defecto § Con Parámetros ► De Copia
4 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 0. 0 false 'u 0000 null : : : Enteros Reales Booleanos Caracteres Referencias
5 Constructor: De Oficio § En C++: En forma implícita: Fraccion f; explícita: Fraccion *f= new Fraccion() f: 0 0
6 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 C++ class Fraccion { private: int num; int den; public: Fraccion(); : }; } } Fraccion: : Fraccion() { num=0; den=1;
7 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; }
8 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];
9 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(); };
10 Ejemplo Implementación de constructores específicos para la clase 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 "CAlumno 1. h" #include "IAlumnos 1. 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();
12 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.
13 Constructor de Copia ► Ejemplos de uso f: 5 1. - Fraccion f(2, 5); Fraccion g=f; 2 g: 2 5 2. - Fraccion h(f); 3. - Un objeto es el valor de retorno de una función: Fraccion: : Suma(Fraccion &f) { Fracción c; . . . return c; }
14 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; }
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 más eficientes que las asignaciones dentro del código 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 vacío } Variables miembros
18 DESTRUCTORES
19 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 () { : }
20 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; }
21 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.
- Slides: 21