Programación Orientada a Objetos usando

CONSTRUCTORES
DESTRUCTORES

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. Inicializa los atributos del objeto a su valor por defecto: ► ► ► ► ► 0 0. ► ► ► Se invoca en el momento de la creación de un objeto.0 false '\u0000 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: f: 0 0 0 0 .

den=1. int den.6 Constructor: ► ► Específico por Defecto Constructor creado por el diseñador de la clase. public: Fraccion(). 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. } } .. Fraccion::Fraccion() { num=0.

. } } . int den. den=d. Anula el constructor de Oficio 2. public: Fraccion(int. : }. Fraccion::Fraccion(int n. int d) { num=n. int).Con Parámetros: Este constructor contiene parámetros y los asigna a las varibales miembros class Fraccion { private: int num.7 Constructor: ► ► Específico con Parámetros Constructor creado por el diseñador de la clase.

3). g=new Fraccion(2. 4.int) 1.2.- Fraccion f(5.- Fraccion V[100].5). .8 Ejemplo ► Uso del constructor específico: Fraccion(int.3).3. Fraccion *g. Fraccion f= Fraccion(5.

int ingreso. void Listar(). int c. void Asigna_nom(char x[]). int Obtener_ingreso().9 Ejemplo Definición de la clase Alumno con dos constructores específicos class Alumno{ private: char nom[25]. char * Obtener_nom(). int a). public: Alumno(). void Asigna_ingreso(int i). int Obtener_carrera(). . Alumno(char *n. }. int carrera. void Asigna_carrera(int c).

} void Alumno::Asigna_nom(char x[]){ strcpy(nom. ingreso=2005. int a){ strcpy(nom.n). carrera=511. } Alumno::Alumno(char *n. carrera=c. ingreso=a. int c. } : : .x).NULL).10 Ejemplo Implementación de constructores específicos para la clase Alumno: Alumno::Alumno(){ strcpy(nom.

cin. cout<<"Ingrese carrera: ". Alumno a(nombre. } . cout<<"Ingrese nombre del alumno".h" #include "IAlumnos1.80). cout<<"Ingrese año de ingreso".carr).Listar().h" void main(){ char nombre[25].h> #include "CAlumno1. cin>>año. int carr. cin>>carr.11 Ejemplo Uso de la clase Alumno: #include <iostream.getline(nombre.anio. int año. a.

► El compilador proporciona uno de oficio.12 Constructor de Copia ► Uso Permite crear objetos inicializándolo a partir de otro objeto de la misma clase. Este constructor efectúa una COPIA bit a bit de las variables miembro del objeto original a objeto destino. .

2..Fraccion f(2.Fraccion h(f).Un objeto es el valor de retorno de una función: Fraccion Fraccion::Suma(Fraccion &f) { Fracción c.5). } . . Fraccion g=f. f: 2 5 g: 2 5 3.. return c....13 Constructor de Copia ► Ejemplos de uso 1.

num. Fraccion::Fraccion(const Fraccion &f) {num= f.14 Constructor de Copia ► Implementación Este constructor tiene SÓLO un argumento que es una referencia constante a un objeto de la clase. den = f. } . Fraccion (const Fraccion&).den.

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

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

int y):num(x).den(y) { puede ir el cuerpo vacío } Variables miembros . Son de gran utilidad :  Para inicializar objetos contantes.17 Inicializadores ► ► ► Utilizados en los constructores Son más eficientes que las asignaciones dentro del código de un constructor.  En clases derivadas Fraccion::Fraccion(int x.

18 DESTRUCTORES .

es único ► ► ► No posee argumentos. Tiene el mismo nombre de la clase con un tilde como prefijo: ~Clase ().19 Destructores Método complemento de los constructores ► No posee valor de retorno ► NO puede sobrecargarse. Clase::~Clase () { : } .

excepto para liberar vectores y/o matrices: Clase::~Clase () {delete [] v.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.

No olvide el destructor. nota Considere la máxima cantidad de constructores. año. Para cada asignatura cursada se deberá registrar: Código. Suponga que la malla curricular considera 72 asignaturas.     .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.

Sign up to vote on this title
UsefulNot useful