Upload
salma
View
58
Download
0
Embed Size (px)
DESCRIPTION
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. - PowerPoint PPT Presentation
Citation preview
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.
► 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
5
Constructor: De Oficio
0
0
f:
0
0
f:
En C++: En forma implícita: Fraccion f;
explícita: Fraccion *f= new Fraccion()
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++
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
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];
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();
};
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);
}::
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();
}
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
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
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
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
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
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.