Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

21
Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES

Transcript of Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

Page 1: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

Programación Orientada a Objetos usando

CONSTRUCTORES

DESTRUCTORES

Page 2: 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.

Page 3: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

3

Constructores

► De Oficio► Específico

Por Defecto Con Parámetros

► De Copia

Page 4: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

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 : Enteros► 0.0 : Reales► false : Booleanos► '\u0000 : Caracteres► null : Referencias

Page 5: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

5

Constructor: De Oficio

0

0

f:

0

0

f:

En C++: En forma implícita: Fraccion f;

explícita: Fraccion *f= new Fraccion()

Page 6: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

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

class Fraccion {

private: int num;

int den; public:

Fraccion();:

};

Fraccion::Fraccion() {

num=0; den=1;

}}

C++

Page 7: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

7

Constructor: Específico con Parámetros

class Fraccion {

private: int num;

int den; public:

Fraccion(int, int);:

};

Fraccion::Fraccion(int n, int d) {

num=n; den=d;

}}

► 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

Page 8: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

8

Ejemplo

1.- Fraccion f(5,3);

► Uso del constructor específico: Fraccion(int,int)

2.- Fraccion f= Fraccion(5,3);

3.- Fraccion *g;

g=new Fraccion(2,5);

4.- Fraccion V[100];

Page 9: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

9

EjemploDefinición de la clase Alumno con dos constructores específicosclass 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();

};

Page 10: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

10

EjemploImplementació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);

}::

Page 11: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

11

EjemploUso 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();

}

Page 12: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

12

► 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.

Constructor de Copia

Page 13: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

13

1.- Fraccion f(2,5);

Fraccion g=f;

► Ejemplos de uso

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;

}

2

5

f:

2

5

g:

Constructor de Copia

Page 14: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

14

► Implementación

Este constructor tiene SÓLO un argumento que es una referencia constante a un objeto de la clase.

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

Fraccion (const Fraccion&);

Constructor de Copia

Page 15: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

15

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

Page 16: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

16

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;

}

Constructor de Copia

Page 17: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

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

Page 18: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

18

DESTRUCTORES

Page 19: Programación Orientada a Objetos usando CONSTRUCTORES 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 () {:

}

Page 20: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

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;}

Page 21: Programación Orientada a Objetos usando CONSTRUCTORES DESTRUCTORES.

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.