3. Estructuras Es una colección de una o mas variables de iguales o diferentes tipo Ayudan a organizar un conjunto de datos complicados Trata a esa colección de variables como a una única unidad
4. Estructuras Ejemplostructpunto {int x;int y;}; La palabra reservada struct presenta la declaración de la estructura, mientras que punto es el nombre o rótulo de la misma. Las variables x e y, son denominadas miembros.
5. Estructuras Declaración e inicializaciónstruct punto p1;struct punto p2 = {10, 35}; p1.x = 24; p1.y = 43;El operador ‘.’ conecta al nombre de la estructura con el nombre del miembro
8. Clases Permite modelar objetos de la vida real Se representan a través de sus atributos o miembros de datos, y sus comportamientos o funciones miembro. Permite aislar comportamiento que no es de interés para los clientes de dicha clase
9. Datos Métodos Clases Struct vs Class struct Time { int hora; int minutos; }; class Time { private: int hora; int minutos; public: Time(); void setTime(int, int); void printTime(); };
10. Clases Encapsulamiento Modificadores de acceso: public Datos y funciones miembros son accesibles desde cualquier clase dentro del programa private Datos y funciones miembro solo son accesibles desde dentro de la clase protected Datos y funciones miembro son accesibles desde dentro de la clase, como así también desde clases derivadas de ella
11. Clases La clase puede ser la responsable de asegurar la integridad de sus datos class Time { private: int hora; int min; public: void setTime(int, int); … }; void Time::setTime(int h, int m) { hora = (h>=0 && h<24) ? h : 0; min = (m>=0 && h<60) ? m : 0; }
12. Clases Métodos o funciones miembro Representan acciones de la clase Aquellos que son públicos, hacen a la interfaz de la clase Existen otros métodos «de utilería» los cuales son usados para operaciones internas de la clase, invocados desde otros métodos
13. Clases Ejemplo: class Time { private: int hora; int min; public: void printTime(); … }; void Time::printTime() { cout << ‘’La hora es ’’ << hora << ‘’:’’ << min << endl; }
14. Clases Sobrecarga de métodos class Time { private: int hora; int min; public: void printTime(); void printTime(bool); … }; void Time::printTime() { cout << hora << ‘’:’’ << min << endl; } void Time::printTime(boolisMilitary) { if (isMilitary) { //lógica conversión } cout << hora << ‘’:’’ << min << endl; }
15. Clases Sobrecarga de métodos, otro ejemplo classCalculator { private: … public: int Sumar(int, int); float Sumar(float, float); … }; intCalculator::Sumar(int a, int b) { return (a+b); } floatCalculator::Sumar (float a, float b) { return (a+b); }
16. Clases Constructor Es una función miembro especial, que lleva el mismo nombre de la clase (C++) Se ejecuta automáticamente cuando se crea una instancia de la clase Entre otras cosas, se puede utilizar para inicializar los miembros de datos de la clase No tiene valor de retorno Time::Time() { hora = min = 0; }
17. Clases Destructor Es otra función miembro especial, que lleva el mismo nombre de la clase, antepuesto por el tilde ~ Se invoca automáticamente cuando el objeto sale del alcance Ejecuta trabajos de terminación, antes de que el sistema recupere el espacio de memoria ocupado No recibe parámetros, ni tiene valor de retorno Time::~Time() { //lógica específica aquí }
19. Herencia Es una forma de reutilización de software donde nuevas clases son creadas a partir de otras, heredando su comportamiento La clase ya definida es la clase base, mientras que la heredera es la clase derivada Los datos y métodos protegidos (protected) de una clase base, son accesibles por la clase derivada.
20. Herencia Herencia simple clase baseclases derivadaspublic Auto: public Vehículo {…}; Vehículo Camión Auto Moto
24. Herencia main(){ Auto a; Moto m;cout << ‘’Auto’’ << endl;a.PrintCantRuedas();a.SetLetraColor(‘R’);a.PrintLetraColor();cout << ‘’Moto’’ << endl;m.PrintCantRuedas();m.SetLetraColor(‘V’);m.PrintLetraColor();} Auto Cantidad ruedas: 4 Letra color: R Moto Cantidad ruedas: 2 Letra color: V Salida
25. Herencia Redefinición de funciones miembro de clase base en clase derivada public Vehículo { public: … void PrintLetraColor();}; public Moto : public Vehículo { public Auto : public Vehículo { public: public: … … void PrintLetraColor(); void PrintLetraColor();}; };
26. Herencia Clase base directa e indirectaAuto hereda directamente de vehículoSedan hereda directamente de autoSedan hereda indirectamente de vehículo Vehículo Auto Sedan
27. Herencia Herencia múltipleLa clase Anfibio hereda funcionalidad tanto de Vehículo (Andar) como así también de Embarcación (Navegar) public Anfibio: public Vehículo, public Embarcación { … }; Embarcación Vehículo Velero Barco Auto Anfibio Moto
Notas del editor
Introto OOP
Inicios programacion estructurada90’s OOPPrograma definido a traves de los datos y acciones structs resuelve los datos, el todo lo resuelve la clase
Mostrar que tiene de mas una clase de una struct: metodos, modificadores de acceso
Clase vs Objeto
Time t; instancia de Time. El nombre de la clase se convierte en el nuevo especificador de tipo.Aquí es donde se empieza a ver por qué C++ es un lenguaje extensible
Sobrecarga de Constructores
No hay sobrecarga de destructores.El destructor no destruye el objeto, o sea, no es el encargado de liberar la memoria
Los objetos de una clase derivada, sontambien objetos del tipo de la clase base, pero no así viceversa (un cuadrado es un poligono, pero no todo poligono es un cuadrado)
Herencia publica, privada o protegida:publica: miembros públicos y protegidos de clase base, serán públicos y protegidos respect en clase derivada (los privados no son heredados!!)privada: miembros públicos y protegidos de clase base, serán privados en clase derivadaprotegida: miembros públicos y protegidos de clase base, serán protegidos en clase derivada
19.6Cuando se redefinen metodos, al invocar dicho metodo en una clase derivada, su version es la que se llama, y no la de su clase baseA pesar de eso, usando el operador de alcance, se puede acceder a la version de la clase base (Base::NombreMetodo)