1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

31
1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

Transcript of 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

Page 1: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

1

LAS CLASES EN C++

PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 3: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

3

class Uno { private:

int k;float x;

public:void procedure(int x);int function();

};Uno a, *b;

Ejemplo

Page 4: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

4

class Empleado { private:

char *nom;char *app;float sueldo;

public:void verDatos();float obtenerSueldo();

};

Ejemplo

Page 5: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 6: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

6

public:

protected:private:

Métodos de cualquier clase Métodos de la clase y sus

derivadasMétodos de la clase

Control de acceso

Page 7: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 8: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 9: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 10: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 11: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 12: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

12

Equivalente 0,333

f

13

Listar()

Numerador()

Denominador()

Equivalente()

Mensajes

Page 13: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

13

class Fraccion { public:

Fraccion();

void Listar();

int Numerador();

int Denominador();

float Equivalente();

private:

int num;

int den;

}

Constructor

Métodos

Atributos

Clase Fraccion

Page 14: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 15: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

15

No poseen argumentos, o

Los argumentos tienen valores asignados

Fracción f;Fraccion()

Fraccion(int x=0,int y=1)

Constructores por defecto

Page 16: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

16

class Fraccion {

public: Fraccion();

Fraccion(int,int);

void Listar();

int Numerador();

int Denominador();

float Equivalente();

private:

int num;

int den;

}

Clase Fraccion

Page 17: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 18: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 19: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 20: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 21: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 22: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 23: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 24: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 25: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 26: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 27: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 28: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 29: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 30: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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

Page 31: 1 LAS CLASES EN C++ PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++

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