Post on 24-Jan-2016
1
LAS CLASES EN C++
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++
2
class <nombre> { private:
<datos privados><métodos privados>
public:<datos públicos><método públicos>
protected:<datos protegidos><método protegidos>
};
Estructura de una clase
3
class Uno { private:
int k;float x;
public:void procedure(int x);int function();
};Uno a, *b;
Ejemplo
4
class Empleado { private:
char *nom;char *app;float sueldo;
public:void verDatos();float obtenerSueldo();
};
Ejemplo
5
Especificador de acceso: public: private: protected:
Ningún miembro podrá ser objeto de la clase que está siendo declarada
Ningún miembro puede declararse como: auto extern register
Conceptos
6
public:
protected:private:
Métodos de cualquier clase Métodos de la clase y sus
derivadasMétodos de la clase
Control de acceso
7
Los métodos se pueden implementar:a. Dentro de la definición de la clase
b. A continuación de la definición de la clase
Tipo Nombre_Clase::Método(parámetros)
{ sentencias }
Tipo Método(parámetros)
{ sentencias }
Métodos
8
Mecanismo mediante el cual el usuario solicita a un objeto que ejecute alguna acción
El objeto, si reconoce el mensaje, activa el método adecuado en respuesta al mensaje
objeto.método_público(argumentos)
Mensajes
9
public:
Fraccion();
void Listar();
int Numerador();
int Denominador();
float Equivalente();
Interfaz
Mecanismo mediante el cual un objeto puede comunicarse con el medio
Se materializa a través de los métodos públicos de la clase
10
Numerador Denominador != 0 Ambos enteros Crear una fracción con datos desde el teclado Conocer su numerador Conocer su denominador Obtener su equivalente real
Clase Fraccion
11
yx
num: 5
den: 7
Listar()
Numerador()
Denominador()
Equivalente()
f:num: 1
den: 2
Listar()
Numerador()
Denominador()
Equivalente()
f1:num: 3
den: 8
Listar()
Numerador()
Denominador()
Equivalente()
f2:
Objetos de clase Fraccion
12
Equivalente 0,333
f
13
Listar()
Numerador()
Denominador()
Equivalente()
Mensajes
13
class Fraccion { public:
Fraccion();
void Listar();
int Numerador();
int Denominador();
float Equivalente();
private:
int num;
int den;
}
Constructor
Métodos
Atributos
Clase Fraccion
14
Igual nombre de funciones Se diferencian en :
La cantidad de parámetros y Tipo de dato de los parámetros
class Fraccion {
public: Fraccion(); Fraccion(int,int);
void Listar();
i nt Numerador(); …
}
Sobrecarga de Constructores
15
No poseen argumentos, o
Los argumentos tienen valores asignados
Fracción f;Fraccion()
Fraccion(int x=0,int y=1)
Constructores por defecto
16
class Fraccion {
public: Fraccion();
Fraccion(int,int);
void Listar();
int Numerador();
int Denominador();
float Equivalente();
private:
int num;
int den;
}
Clase Fraccion
17
int main() {
Fraccion f;
Fraccion g(2,3);
f.Listar();
cout<<f.Numerador();
cout<<"Equivalente de: "<<endl;
cout<<f.Numerador()<<" /" <<f.Denominador() <<": ";
cout<<f.Equivalente()<<endl;
cout<<g.Numerador()<<" /" <<g.Denominador() <<": ";
cout<<g.Equivalente()<<endl;
return 0;}
ConstructoresConstructores
Mensaje
Uso de la clase Fraccion
18
Fraccion f1; x = f1. Numerador( );
Estático:
Fraccion *f1;f1 = new Fraccion( );x = (*f1).Numerador( );x = f1->Numerador();
Dinámico:
Creación de objetos
19
Utilidad: Liberar recursos solicitados por el constructor Objetos en el heap se destruyen con el operador
delete
No se requiere implementar si no se utiliza almacenamiento dinámico como parte del objeto
Se invoca implícitamente cuando finaliza el bloque en fue declarado el objeto
Destructores
20
int main() { int n,d;
Fraccion f1;f1.Imprimir();
cout << f1.Equivalente() << endl;do {
cout << "Numerador : "; cin >> n; cout << "Denominador: "; cin >> d; if (d!=0) {
Fraccion f2(n, d); f2.Imprimir();
cout << f2.Equivalente() << endl;}
} while (d!=0);return 0;
}
// Creación de f1
// Creación de f2
// Destrucción de f1
// Destrucción de f2
Uso de destructores
21
class Complejo { private: float real; float imag; public: Complejo(); Complejo(float); Complejo(float, float); Complejo(Complejo &); void setR(float); void setI(float); float getR(); float getI(); void verComplejo(); ~Complejo(); // Alt 126};
Clase Complejo
22
Complejo::Complejo() { real = 0; imag = 0;}Complejo::Complejo(float x) { real = x; imag = 0;}Complejo::Complejo(float x, float y) { real = x; imag = y;}Complejo::Complejo(Complejo &C) { real = C.real; imag = C.imag;}void Complejo::setR(float x) { real = x;}
Implementación clase Complejo
23
void Complejo::setI(float y) { imag = y;}float Complejo::getR() { return real;}float Complejo::getI() { return imag;}void Complejo::verComplejo() { cout << " Complejo como par ordenado: " << endl;
cout << " (" << real << ", " << imag << ") " << endl;cout << " Complejo en forma binomial: " << endl;
cout << real << " + " << imag << "i" << endl;}Complejo::~Complejo() { cout << " Eliminando complejo " << endl;}
Implementación clase Complejo
24
int main(int argc, char *argv[]) { Complejo C0, C1(1.1), C2(2.1, 2.6), C3(3.1, 3.6); Complejo C4 = C1; Complejo *q, *p = new Complejo(C2); C0.verComplejo(); C1.verComplejo(); C2.verComplejo(); C3.verComplejo(); C4.verComplejo(); C0 = *p; C0.verComplejo(); *q = C1; (*p).verComplejo(); (*q).verComplejo();
delete p; delete q; return 0;}
Uso clase Complejo
25
class Fecha { private: int dd; int mm; int aa; public: void setDia(int); void setMes(int); void setAño(int); int getDia(); int getMes(); int getAño(); void verFecha(); };
Clase Fecha
26
class Empleado { private: char *nombre; char *direccion; long sueldo; Fecha nacim; Fecha contrat; public: void setNombre(char *); void setDireccion(char *); void setSueldo(long); void setNac(Fecha); void setCont(Fecha); char *getNombre(); char *getDireccion(); long getSueldo(); Fecha getNac(); Fecha getCont(); void verEmpleado();};
Clase Empleado
27
void Fecha::setDia(int d) { dd = d;}void Fecha::setMes(int m) { mm = m;}void Fecha::setAño(int a) { aa = a;}int Fecha::getDia() { return dd;}int Fecha::getMes() { return mm;}int Fecha::getAño() { return aa;}void Fecha::verFecha() { cout << “ Dia: " << dd << “ Mes: " << mm << “ Año: "
<< aa << endl;}
Implementación clase Fecha
28
void Empleado::setNombre(char *nom) { nombre = new char[strlen(nom)+1]; strcpy(nombre, nom);}void Empleado::setDireccion(char *dir) { direccion = new char[strlen(dir)+1]; strcpy(direccion, dir);}void Empleado::setSueldo(long suel) { sueldo = suel;}void Empleado::setNac(Fecha f) { nacim = f;}void Empleado::setCont(Fecha f) { contrat = f;}char *Empleado::getNombre() { return nombre;}
Implementación clase Empleado
29
char *Empleado::getDireccion() { return direccion;}long Empleado::getSueldo() { return sueldo;}Fecha Empleado::getNac() { return nacim;}Fecha Empleado::getCont() { return contrat;}void Empleado::verEmpleado() { cout<<"Nombre: "<< nombre << endl; cout<<"Direccion: "<< direccion << endl; cout<<"Sueldo: "<< sueldo << endl; cout<<"Fecha de nacimiento "<< endl; nacim.verFecha(); cout<<"Fecha de contratacion "<< endl; contrat.verFecha();}
Implementación clase Empleado
30
int main(int argc, char *argv[]) { Empleado E; Fecha F, G; char *c = new char[10]; long d, m, a, s; cout<<"Ingrese nombre: "; cin.getline(c,10); E.setNombre(c); cout<<"Ingrese direccion: "; cin.getline(c,10); E.setDireccion(c); cout<<"Ingrese sueldo: "; cin>>s; E.setSueldo(s); cout<<"Ingrese fecha de nacimiento "<< endl; cout << " Dia: "; cin >> d; cout << " Mes: "; cin >> m;
Uso clase Empleado
31
cout << " Año: "; cin >> a;
F.setDia(d); F.setMes(m); F.setAgno(a); E.setNac(F); cout<<"Ingrese fecha de contratacion "<< endl; cout << " Dia: "; cin >> d; cout << " Mes: "; cin >> m; cout << " Agno: "; cin >> a; G.setDia(d); G.setMes(m); G.setAgno(a); E.setCont(G); E.verEmpleado();
return 0;}
Uso clase Empleado