Download - PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++
![Page 1: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/1.jpg)
PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++
![Page 2: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/2.jpg)
2
PROYECTOS EN C++
![Page 3: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/3.jpg)
3
Construcción de un proyecto
Un proyecto se construye separando la interfaz (definición) de la implementación de una clase
La interfaz debe crearse como header (archivo con extensión .h) Uso en la implementación y en el mismo
proyecto:
Uso en otro proyecto incluir la respectiva ruta de acceso:
#include "nombre.h"
#include "path\nombre.h"
![Page 4: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/4.jpg)
4
// Interfaz de la clase Par en archivo defpar.hclass Par { private: // Atributos int x, y; public: // Métodos Par(); Par(int, int); int mas(); int por(); void verM(); void verP();};
Interfaz
![Page 5: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/5.jpg)
5
// Implementación de la clase Par en archivo imp.cpp#include <iostream> #include "defpar.h"Par::Par() { x = 0; y = 0;}Par::Par(int a, int b) { x = a; y = b; }int Par::mas() { return x + y; }
Implementación
![Page 6: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/6.jpg)
6
int Par::por() {return x*y; }void Par::verM() { cout << x << " + " << y << " = " << mas();}void Par::verP() { cout << x << " * " << y << " = " << por(); }
Implementación
![Page 7: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/7.jpg)
7
// Uso de la clase Par en archivo uso.cpp#include "defpar.h "int main() { Par *p = new Par(); Par *q = new Par(4, 8); (*p).verM(); (*p).verP(); (*q).verM(); (*q).verP(); return 0;}
Uso
![Page 8: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/8.jpg)
8
FUNCIONES CONSTANTES
![Page 9: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/9.jpg)
9
Métodos constantes
Un método constante NO puede modificar los atributos del objeto
<tipo> <nombre>(<parámetros>) const;
![Page 10: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/10.jpg)
10
class Hora {public:
Hora(int=0, int=0, int=0); void AsignaHora(int);void AsignaMin(int);void AsignaSeg(int);void MuestraHora() const;void MuestraMin() const;void MuestraSeg() const;
private:int hh;int mm;int ss;
};
Interfaz de la clase Hora
![Page 11: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/11.jpg)
11
Hora::Hora(int h, int m, int s) { hh = (h>=0 && h<24) ? h:0;mm = (m>=0 && m<60) ? m:0;ss = (s>=0 && h<60) ? s:0;
}void Hora::AsignaHora(int h) {
hh=h;}void Hora::AsignaMin(int m) {
mm=m;}void Hora::AsignaSeg(int s) {
ss=s;}
Implementación de la clase Hora
![Page 12: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/12.jpg)
12
void Hora::MuestraHora() const { cout << hh << " horas ";
}void Hora::MuestraMin() const {
cout << mm << " minutos ";}void Hora::MuestraSeg() const {
cout << ss << " segundos ";}
Implementación de la clase Hora
![Page 13: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/13.jpg)
13
OBJETOS CONSTANTES
![Page 14: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/14.jpg)
14
Objetos constantes
Declaración de variables NO modificables por asignación
Si la variable es un atributo, ninguno de los métodos puede modificarla
const <tipo> <variable>;
![Page 15: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/15.jpg)
15
int main() {const Hora x(12,3,10);
x.AsignaHora(9);x.AsignaMin(34);x.AsignaSeg(22);Hora y;y.AsignaHora(5);y.AsignaMin(3);y.AsignaSeg(16);return 0;
}
ErrorIntento de modificar objeto constante
Uso de la clase Hora
![Page 16: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/16.jpg)
16
CONSTRUCTORES
![Page 17: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/17.jpg)
17
Constructores
Un constructor es un método cuyo nombre es el mismo de su clase
Se activa implícitamente para crear un objeto
Permite dar valores iniciales a los atributos No es una función que retorne un valor Si en la clase No se define un constructor, el
compilador proporciona un constructor de oficio (por omisión)
![Page 18: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/18.jpg)
18
Constructores
Puede sobrecargarse Invocación implícita
Invocación explícita
Fraccion f;Fraccion f(3, 7);
Fraccion g = Fraccion();Fraccion h = Fraccion(4, 9);
![Page 19: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/19.jpg)
19
Fraccion f;f.num=6;Fraccion f(5,3);Fraccion f= Fraccion(5,3);Fraccion *f=new Fraccion;Fraccion *g;g=new Fraccion(2,5);
Constructores
Viola el principio de encapsulamiento
![Page 20: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/20.jpg)
20
Fraccion::Fraccion(int x,int y) {SetNum(x);SetDen(y);
}
Fracción::Fraccion(int x,int y) {num=x; den=y;
}
Constructores
![Page 21: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/21.jpg)
21
Inicializadores
Ocultan la asignación explícita Son de gran utilidad:
Para inicializar objetos constantes En clases derivadas (herencia)
Fraccion::Fraccion(int x,int y) : num(x), den(y) { // puede ir el cuerpo vacío }
Sección de inicializació
n
![Page 22: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/22.jpg)
22
Atributos constantes
La declaración de atributos constantes se realiza para impedir que un método efectúe una modificación de sus valores
Inicializador
atributo(valor)
Uso de
cuya forma es
![Page 23: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/23.jpg)
23
class Incremento {public:
Incremento(int c=0, int k=1);void Increm();void Decrem();void Listar() const;
private:int cont;const int inc;
};
Interfaz de la clase Incremento
![Page 24: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/24.jpg)
24
Incremento::Incremento(int c, int k) : inc(k) {cont = c;
} void Incremento::Increm() {
cont += inc;}void Incremento::Decrem() {
cont -= inc;}void Incremento::Listar() const {
cout << "contador: " << cont << endl; cout << "incremento: " << inc << endl;}
Implementación de la clase Incremento
![Page 25: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/25.jpg)
25
int main() {Incremento x(1, 5);
int i; x.Listar(); for (i=1;i<=6;i++)
x.Increm(); cout<< "Después de " << i << " incrementos: "; x.Listar(); x.Decrem(); x.Listar();
return 0;}
Uso de la clase Incremento
![Page 26: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/26.jpg)
26
Tipos de constructores
Por Defecto Con Argumentos De Copia
![Page 27: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/27.jpg)
27
Constructor por Defecto
Un constructor por defecto puede ser: De Oficio Sin Parámetros Con Parámetros
![Page 28: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/28.jpg)
28
Constructor por Defecto
Constructor de Oficio Existe por omisión Lo incorpora automáticamente el
compilador, si el usuario No define ningún constructor
Inicializa los atributos según los valores por omisión establecidos por el lenguaje
![Page 29: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/29.jpg)
29
Constructor por Defecto
Constructor sin Parámetros Inicializa los atributos con valores por
defectoclass Fraccion {private:
int num;int den;
public:Fraccion();…
};
![Page 30: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/30.jpg)
30
Constructor por Defecto
Implementación
Composición
Fraccion::Fraccion() {num=0;den=1;
}
Fraccion V[100];
![Page 31: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/31.jpg)
31
Constructor por Defecto
Constructor con Parámetros Los parámetros formales tienen asignado un
valor por defecto en la declaración del método
Declaraciones permitidas:
Fraccion(int x=0, int y=1)
Fraccion f;Fraccion g(3);Fraccion h(2, 5);
![Page 32: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/32.jpg)
32
Constructor con Argumentos
Prototipos
Declaraciones permitidas
Fraccion(int x)Fraccion(int x, int y=1)
int a=3, b=6, c=9;Fraccion g(a);Fraccion h(b, c);
![Page 33: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/33.jpg)
33
Constructor de Copia
Permite crear un objeto e inicializarlo a partir de otro objeto de la misma clase
Tiene, como único parámetro, un objeto de su clase el cual se utilizará en la inicialización
El compilador provee un constructor de copia de oficio que efectúa la copia de los atributos del objeto original en el nuevo
![Page 34: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/34.jpg)
34
Constructor de Copia
Su único parámetro es una referencia constante a un objeto de la clase
Fraccion (const Fraccion &)
Fraccion::Fraccion(const Fraccion &k) {num = k.num;
den = k.den;}
Fraccion f1(f2);
![Page 35: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/35.jpg)
35
Constructor de Copia
class Alumno { private: char *nom;
int mat;float prom;...
}
Alumno a2;
*nom:mat: 12345prom:4.7
*nom:mat: 12345prom:4.7
Alumno a1;
"Serapio Jento"
![Page 36: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/36.jpg)
36
DESTRUCTORES
![Page 37: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/37.jpg)
37
Destructor
Complemento del constructor No es una función void o que retorne un
valor No puede sobrecargarse pues es único No posee argumentos Tiene el mismo nombre de la clase
precedido del símbolo ~~Clase ()
![Page 38: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/38.jpg)
38
Destructor
Es llamado implícitamente cuando finaliza el bloque que determina el alcance del objeto
Los objetos creados dinámicamente (new) deben eliminarse explícitamente con delete
El compilador provee un destructor, excepto para liberar memoria dinámica
Clase::~Clase () { delete [] v; }
![Page 39: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/39.jpg)
39
class Alumno {private:
char *nom; int matr; double prom;
public:Alumno();Alumno(char *, int);void Listar();~Alumno();
};
Interfaz
![Page 40: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/40.jpg)
40
Alumno::Alumno(char *x, int m=0) {nom = new char[strlen(x)+1];
strcpy(nom, x); matr=m; prom=0.0;}Alumno::~Alumno() {
delete [] nom;}
Implementación
![Page 41: PROGRAMACIÓN ORIENTADA A OBJETOS USANDO C++](https://reader033.vdocuments.co/reader033/viewer/2022042510/56813498550346895d9b8baf/html5/thumbnails/41.jpg)
41
int main() {Alumno a("Juan");
Alumno b("María", 1234); a.Listar(); b.Listar();
return 0;}
Uso