1
Recordatorios
- Clases de asignación de memoria.
- Construcción, inicialización y carga de objetos.
- Fugas de memoria.
- Constance, la palabra clave mutable, Lazy Computation.
- Amistad C++ y control de acceso.
- Destrucción virtual.
- Estrategia de gestión de excepciones.
- Espacios de nombres.
2
Nuevas funciones del lenguaje en C++11
- nullptr y otros literales.
- Las directivas =delete, =default.
- Delegación del fabricante.
- Enumeraciones seguras.
- La palabra clave auto y el bucle sobre un intervalo.
- referencia rvalue e impacto en la forma normal de las clases C++.
- Expresiones lambda.
Trabajo práctico
Reescritura de código C++ existente en C++11, comparando las dos implementaciones.
3
Gestión de operadores
- Operadores binarios y unarios.
- El operador de indirección, caso de uso.
- El operador de referenciación.
- Operadores de incremento/decremento prefijados y postfijados.
- Otros operadores: comparación, asignación, etc.
- Sobrecarga del operador [] y de los operadores de inserción (<<) y extracción (>>).
- Functores y sobrecarga de operadores (), una ventaja sobre las funciones.
Trabajo práctico
Creación de functores y proxies (liberación de memoria, recuento de referencias) con los operadores estudiados.
4
Conversión y RTTI
- Operadores de conversión. Construcciones implícitas, la palabra clave explícita.
- Operadores de reparto const_cast, static_cast, reinterpret_cast.
- Conversión dinámica e información de tipos en tiempo de ejecución.
- El operador typeid y las excepciones relacionadas.
- La clase type_info.
- Control del downcasting mediante el operador dynamic_cast.
Trabajo práctico
Implementación de los modismos "is-a" y "is-kind-of" con dynamic_cast.
5
Genericidad
- Introducción a los patrones de clase. Genericidad y preprocesador.
- Función genérica. Clase genérica. Composición genérica. Generalización genérica.
- Especialización parcial y total.
- Introducción a la metaprogramación.
- Genericidad, el principio unificador de las bibliotecas STL y Boost.
Trabajo práctico
Inicio del estudio de casos, que se completará con el STL. Implementación de la composición genérica y la generalización. Creación de plug-ins genéricos.
6
La STL (Biblioteca de plantillas estándar)
- Componentes STL: tipos complementarios, contenedores, algoritmos, iteradores, objetos función, adaptadores.
- Cadenas de caracteres STL, la clase de plantilla basic_string y sus especializaciones.
- Contenedores secuenciales y asociativos: definición, función y criterios de selección.
- Asignadores y gestión de la memoria de los contenedores.
- Métodos para insertar, eliminar, iterar y acceder a los principales contenedores: Vector, Lista, Conjunto, Pila, etc.
- El concepto de iterador. Navegación por un contenedor.
- Los distintos grupos de algoritmos STL: no mutantes, mutantes, de ordenación y fusión, numéricos.
- Manejo de contenedores (manipulación, búsqueda de valores, etc.).
- Parametrizar algoritmos genéricos mediante objetos "función".
- Adaptadores" y modificar el comportamiento de un componente.
- STL y procesamiento de flujos (archivos, memoria, etc.).
- El principio RAII: punteros automáticos y la clase auto_ptr.
- Excepciones STL estándar.
Trabajo práctico
Implementación de relaciones con colecciones STL. Uso de cualquier algoritmo estándar.
7
Novedades de la biblioteca estándar C++11
- Evolución histórica: Boost --> TR1 --> C++11.
- Nuevos contenedores: array, forward_list, unordered_set, unordered_map.
- La clase tupla.
- Punteros inteligentes: shared_ptr, weak_ptr, unique_ptr.
- Nuevos functores y aglutinantes.
- Introducción a la gestión de hilos.
- Expresiones regulares.
Trabajo práctico
Implementación de la robustez con punteros inteligentes. Uso de expresiones regulares.
8
Boost y sus principios
- Biblioteca de contenedores de punteros (destrucción de datos de punteros de contenedores).
- Las estructuras de datos boost::any y boost::variant.
- Programación basada en eventos (conexiones y señales).
- Gestión de procesos, mecanismos de comunicación entre procesos y memoria compartida.
Trabajo práctico
Implementación mejorada del caso práctico utilizando la biblioteca de contenedores de punteros.
9
Uso avanzado de la herencia
- Herencia frente a internado. Patrimonio privado. Patrimonio protegido.
- Exportación de miembros ocultos con la cláusula Using.
- Gestión de herencia múltiple y colisión de miembros.
- Herencia diamante. Herencia virtual y dynamic_cast.
- Principios de diseño: sustitución de Liskov, principio de apertura/cierre, inversión de la dependencia.
- Reglas de implementación de interfaces en C++.
Trabajo práctico
Combine la herencia múltiple, la herencia privada y la exportación para crear clases robustas y altamente escalables.