240 likes | 682 Views
POO en C++. Programación Orientada a Objetos. Declaración de clases con struct. Las clases en C++ pueden definirse utilizando la construcción struct Ejemplo: enum Boolean {false, true}; //false = 0, true = 1 struct Point{ int X; int Y; Boolean Visible; }
E N D
POO en C++ Programación Orientada a Objetos
Declaración de clases con struct Las clases en C++ pueden definirse utilizando la construcción struct Ejemplo: enum Boolean {false, true}; //false = 0, true = 1 struct Point{ int X; int Y; Boolean Visible; } Por omisión todos los miembros datos son públicos. Objetos de la clase Point. Point Origen; Point Row[80]; Point *point_ptr; point_ptr = &Origen; point_ptr = Row;
Definición de métodos Los métodos pueden definirse dentro o fuera de la clase Ejemplo dentro de la clase struct Point{ int X; int Y; Boolean Visible; int GetX(){return X;} //función en línea (in line) } Ejemplo fuera de la clase struct Point{ int X; int Y; Boolean Visible; int GetX(); } Point::GetX(){return X;}
Invocación de métodos (mensajes) Para invocar a los métodos es necesario crear un objeto de la clase (instanciar) y enviarle mensajes. El formato es nombre-objeto.función-miembro(argumentos) Ejemplo Point EstePunto; EstePunto.X = 17; EstePunto.Y = 42; EstePunto.Visible = true; xx = EstePunto.GetX();
Constructores Es conveniente iniciar los objetos con valores de los miembros dato bien definidos. Un constructor tiene por objeto iniciar los valores de los miembros datos adecuadamente. Los constructores en C++ son métodos que tienen el mismo nombre que la clase a que pertenecen. struct Point{ int X; int Y; Boolean Visible; int GetX(){return X;} Point(int NewX, int NewY); //constructor } Point::Point(int NewX, int NewY){ X = NewX; Y = NewY; }
Valores por defecto En C pueden declararse métodos con parámetros con valores por defecto. De esta manera no es necesario especificar todos los argumentos al invocar un método. struct Point{ int X; int Y; Boolean Visible; int GetX(){return X;} Point(int NewX, int NewY); //constructor } Point::Point(int NewX = 0, int NewY = 0){ X = NewX; Y = NewY; } Point Origen(1,1); //X = 1, Y = 1 Point EstePunto(3); //X = 3, Y = 0 Point AquelPunto(); //X = 0, Y = 0
Control de acceso a miembros C++ provee tres modificadores de acceso a miembros, como se resume en la siguiente tabla:
Ejemplo de control de acceso struct Point{ private: int X; int Y; Boolean Visible; public: int GetX(){return X;} Point(int NewX, int NewY); //constructor } Point EstePunto(); EstePunto.X = 5; //ERROR xx = EstePunto.GetX(); //ACEPTABLE
Declaración mediante class Las clases en C++ pueden definirse utilizando la construcción class Ejemplo: enum Boolean {false, true}; //false = 0, true = 1 class Point{ int X; int Y; Boolean Visible; public: int GetX(); Point(int NewX, int NewY); } Por omisión todos los miembros datos son privados.
La clase Point #include <iostream.h> // necesaria para I/O #include <conio.h> class Point { // define clase Point int X; // X y Y son privados por omisión int Y; public: Point(int InitX, int InitY) {X = InitX; Y = InitY;} int GetX() {return X;} // funciones miembro públicas int GetY() {return Y;} }; int main() { int YourX, YourY; cout << "Set X coordinate: "; // solicitud cin >> YourX; // entrada de YourX cout << "Set Y coordinate: "; // otra solicitud cin >> YourY; // entrada de YourY // llamada al constructor Point YourPoint(YourX, YourY); // llamada a función miembro cout << "X is " << YourPoint.GetX(); cout << '\n'; // salto de línea // llamada a función miembro cout << "Y is " << YourPoint.GetY(); cout << '\n'; getch(); //espera carácter return 0; }
Herencia Redefinición de la clase Point (archivo Point.h de encabezado) class Location { protected: // permite a clases derivadas acceder datos privados int X; int Y; public://estas funciones pueden accederse desde fuera Location(int InitX, int InitY); int GetX(); int GetY(); }; class Point : public Location{//derivada de Location // derivación pública indica que X y Y son protegidos // dentro de Point protected: Boolean Visible;// las clases derivadas de Point // necesitarán acceso public: Point(int InitX, int InitY); // constructor void Show(); void Hide(); Boolean IsVisible(); void MoveTo(int NewX, int NewY); };
Archivo de implementación // funciones miembro de la clase Point: Estas suponen // que el programa principal inicia las gráficas Point::Point(int InitX, int InitY) : Location(InitX,InitY) { Visible = false; // la hace invisible por default }; void Point::Show(void) { Visible = true; putpixel(X, Y, getcolor()); // usa el color default }; void Point::Hide(void) { Visible = false; // uses color de fondo para borrar putpixel(X, Y, getbkcolor()); }; Boolean Point::IsVisible(void) { return Visible; }; void Point::MoveTo(int NewX, int NewY) { Hide(); // hace el punto invisible X = NewX; // cambia X y Y a una nueva posición Y = NewY; Show(); // muestra el punto en la nueva posición }; Archivo de implementación de las clases Location y Point (archivo Point2.cpp) invoca constructor de Location #include "point.h" #include <graphics.h> // funciones miembro de la clase // Location Location::Location(int InitX, int InitY) { X = InitX; Y = InitY; }; int Location::GetX(void) { return X; }; int Location::GetY(void) { return Y; };
Programa de ejemplo #include <graphics.h> // Biblioteca gráfica #include <conio.h> // para getch() #include "point.h" // declaraciones de Point y Location int main() { // inicia el sistema gráfico int graphdriver = DETECT, graphmode; initgraph(&graphdriver, &graphmode, "..\\bgi"); // Mueve un punto a través de la pantalla Point APoint(100, 50); // Inicia X, Y a 100, 50 APoint.Show(); // APoint semuestra getch(); // espera una tecla APoint.MoveTo(300, 150); // APoint se mueve a 300,150 getch(); // espera una tecla APoint.Hide(); // APoint se oculta getch(); // espera una tecla closegraph(); // Restaura pantalla original return 0; }