Bienvenido al proyecto de C++ para el curso de 42. Este repositorio contiene una serie de ejercicios diseñados para profundizar en diversos aspectos del lenguaje C++.
Este proyecto está diseñado para proporcionar una inmersión profunda en el lenguaje de programación C++. A lo largo de varios proyectos, exploramos una amplia gama de conceptos y técnicas avanzadas en C++. A continuación se presenta un resumen de cada proyecto (CPP0x), describiendo los objetivos de aprendizaje y los conceptos clave que se exploran en cada uno.
- CPP00 - Introduction to C++
- CPP01 - Class and Object-Oriented Programming
- CPP02 - Inheritance and Polymorphism
- CPP03 - Advanced OOP
- CPP04 - More OOP and Exceptions
- CPP05 - Exception Handling and Serialization
- CPP06 - Dynamic Casting and Memory Management
- CPP07 - Templates and Iterators
- CPP08 - Advanced Data Structures and Algorithms
- CPP09 - Algorithms and Processing
El primer proyecto de la piscina se centra en introducir a los estudiantes a la programación en C++ a través de ejercicios básicos que cubren los fundamentos del lenguaje.
- 
Exercise 00: Megaphone 
 Objetivo: Aprender a manipular cadenas de texto y usar las funciones básicas del lenguaje C++.
 Conceptos: Conversión de texto, funciones estándar de C++, manejo de cadenas.
- 
Exercise 01: Phonebook 
 Objetivo: Familiarizarse con el manejo de entradas del usuario y el uso de la biblioteca estándar para gestionar datos.
 Conceptos: Uso degetline, manipulación de datos, manejo de entradas y salidas.
- 
Exercise 02: Class Implementation 
 Objetivo: Continuar el trabajo con estructuras de datos y comprender cómo almacenar y gestionar información de manera más compleja.
 Conceptos: Estructuras de datos simples, gestión de la información.
Este proyecto introduce conceptos fundamentales de la programación orientada a objetos (OOP) y la implementación de clases en C++.
- 
Exercise 00: BrainzzZ 
 Objetivo: Comprender la implementación básica de clases y objetos en C++.
 Conceptos: Definición de clases, miembros de clase, métodos.
- 
Exercise 01: More Brainz 
 Objetivo: Profundizar en la manipulación de datos dentro de las clases y cómo interactúan los objetos.
 Conceptos: Constructores y destructores, operadores de sobrecarga.
- 
Exercise 02: Hi This is Brain 
 Objetivo: Trabajar con métodos de clase y comprensión del ciclo de vida de los objetos.
 Conceptos: Métodos estáticos, ciclo de vida del objeto.
- 
Exercise 03: Unnecessary Violence 
 Objetivo: Explorar la herencia y la sobrecarga de operadores en C++.
 Conceptos: Herencia, sobrecarga de operadores.
- 
Exercise 04: Sed is for losers 
 Objetivo: Aprender a leer y escribir archivos.
 Conceptos: std::ifstream y std::ofstream.
- 
Exercise 05: Harl 2.0 
 Objetivo: Manejar el flujo de control y la programación orientada a objetos.
 Conceptos: Control de flujo, clases y métodos.
- 
Exercise 06: Harl Filter 
 Objetivo: Ampliar el conocimiento sobre la manipulación de cadenas y el control de flujo.
 Conceptos: Manipulación de cadenas, estructuras condicionales.
El enfoque de este proyecto es en la herencia y el polimorfismo en C++, conceptos clave en la programación orientada a objetos.
- 
Exercise 00: First Class in Orthodox Canonical Form 
 Objetivo: Implementar herencia básica y comprender la relación entre clases base y derivadas.
 Conceptos: Herencia simple, clases derivadas.
- 
Exercise 01: Towards a more useful fixed-point 
 Objetivo: Ampliar la herencia para manejar múltiples niveles y clases derivadas.
 Conceptos: Herencia múltiple, clases derivadas.
- 
Exercise 02: Now we're talking 
 Objetivo: Profundizar en el concepto de polimorfismo y su implementación en C++.
 Conceptos: Polimorfismo, clases abstractas.
- 
Exercise 03: NBSP 
 Objetivo: Explorar problemas avanzados de herencia como el "diamante" en C++.
 Conceptos: Herencia múltiple, resolución de ambigüedades.
Este proyecto se centra en conceptos avanzados de la programación orientada a objetos, incluyendo la herencia avanzada y la manipulación de excepciones.
- 
Exercise 00: And... OPEN! (Claptrap) 
 Objetivo: Implementar la clase baseClaptrap, un robot básico en un juego.
 Conceptos: Diseño de clases base, encapsulamiento, métodos y atributos.
- 
Exercise 01: Serena, my love! (Claptrap y ScavTrap) 
 Objetivo: ExtenderClaptrappara crear la clase derivadaScavTrapcon funcionalidades adicionales.
 Conceptos: Herencia simple, sobreescritura de métodos, constructor y destructor en herencia.
- 
Exercise 02: Repetitive work (Claptrap, ScavTrap y Fragtrap) 
 Objetivo: Introducir la claseFragTrap, que hereda deClaptrapyScavTrap.
 Conceptos: Herencia múltiple, resolución de ambigüedades, composición de comportamientos.
- 
Exercise 03: Now it's weird! (Claptrap, ScavTrap, Fragtrap y DiamondTrap) 
 Objetivo: Crear la claseDiamondTrap, gestionando la complejidad de la herencia en diamante.
 Conceptos: Herencia en diamante, métodos virtuales puros, diseño de jerarquías de clases.
Este proyecto profundiza en la programación orientada a objetos y el manejo avanzado de excepciones.
- 
Exercise 00: Polymorphism 
 Objetivo: Implementar una jerarquía de clases de animales para demostrar el polimorfismo en C++.
 Conceptos: Polimorfismo, funciones virtuales, jerarquías de clases.
- 
Exercise 01: I don't want to set the world on fire 
 Objetivo: Gestionar memoria y lógica en la claseBrain, integrándola con otras clases.
 Conceptos: Gestión de memoria, encapsulamiento, relaciones entre clases.
- 
Exercise 02: Abstract Class 
 Objetivo: Trabajar con clases abstractas que definen interfaces para clases derivadas.
 Conceptos: Clases abstractas, métodos puros virtuales, diseño orientado a interfaces.
- 
Exercise 03: Interface & Recap 
 Objetivo: Implementar interfaces y consolidar los conceptos aprendidos en ejercicios anteriores.
 Conceptos: Interfaces en C++, recapitulación, diseño y organización del código.
Este proyecto se enfoca en el manejo de excepciones y la serialización de datos en C++.
- 
Exercise 00: I want to be a bureaucrat! 
 Objetivo: Implementar la claseBureaucrat, que gestiona el rango de un burócrata y su capacidad para manejar formularios.
 Conceptos: Clases y atributos, validación de datos, gestión de excepciones.
- 
Exercise 01: Form up, maggots! 
 Objetivo: Crear la claseForm, que puede ser firmada o ejecutada por unBureaucrat, con requisitos específicos.
 Conceptos: Definición de formularios, relación entre clases, control de acceso y métodos.
- 
Exercise 02: You need form is 28B, not 28C 
 Objetivo: Manejar diferentes tipos de formularios con requisitos específicos para cada uno.
 Conceptos: Gestión de múltiples formularios, identificación y manejo de formularios, interacción entre burócratas y formularios.
- 
Exercise 03: Coffee-making 
 Objetivo: Implementar la claseIntern, que genera diferentes tipos de formularios según las solicitudes.
 Conceptos: Creación de objetos dinámicos, patrón de fábrica, manejo de memoria y recursos.
Este proyecto profundiza en la gestión dinámica de memoria y el uso de casting en tiempo de ejecución.
- 
Exercise 00: Conversion of Scalar Types (scalar.cpp) 
 Objetivo: Explorar la conversión entre tipos escalares como int, float, double y char.
 Conceptos: Conversión de tipos escalares, precisión y pérdida de datos, técnicas de casting (static_cast).
- 
Exercise 01: Serialization (base.cpp) 
 Objetivo: Implementar una claseSerializerpara convertir punteros a enteros y viceversa.
 Conceptos: Serialización y deserialización, implementación de métodos estáticos, verificación de punteros.
- 
Exercise 02: Identify Real Type (dynamic_cast) 
 Objetivo: Identificar el tipo real de un objeto utilizandodynamic_cast.
 Conceptos: Generación aleatoria de objetos, identificación dinámica de tipos, polimorfismo y RTTI.
Este proyecto se enfoca en el uso de plantillas y iteradores en C++.
- 
Exercise 00: Start with a Few Functions 
 Objetivo: Implementar funciones genéricas usando plantillas para manejar distintos tipos de datos.
 Conceptos: Funciones plantillas, versatilidad del código, simplicidad y mantenimiento.
- 
Exercise 01: Iter 
 Objetivo: Crear una función plantilla para iterar sobre elementos de un contenedor genérico.
 Conceptos: Iteradores y plantillas, aplicación de funciones a contenedores, flexibilidad en la programación.
- 
Exercise 02: Array 
 Objetivo: Implementar una clase plantilla para arreglos dinámicos, con funcionalidades para manipular elementos.
 Conceptos: Plantillas de clases, manejo de memoria, operaciones con arreglos.
Este proyecto profundiza en estructuras de datos avanzadas y algoritmos.
- 
Exercise 00: Easy Find 
 Objetivo: Implementareasyfind, una función plantilla para buscar elementos en contenedores estándar.
 Conceptos: Búsqueda en contenedores, uso de iteradores, plantillas de funciones.
- 
Exercise 01: Span 
 Objetivo: Implementar una claseSpanpara gestionar un rango de enteros, permitiendo agregar números y calcular el rango.
 Conceptos: Gestión de contenedores dinámicos, cálculo de rango, manejo de excepciones.
- 
Exercise 02: Mutated Abomination 
 Objetivo: Extenderstd::stackcon una claseMutantStackque añade operaciones como encontrar el valor mínimo y proporciona iteradores personalizados.
 Conceptos: Extensión de clases estándar, iteradores personalizados, manejo de valores extremos.
El último proyecto de la piscina se enfoca en la implementación de algoritmos y el procesamiento de datos.
- 
Exercise 00: Bitcoin Exchange 
 Objetivo: Implementar algoritmos para la optimización de transacciones en un mercado de criptomonedas.
 Conceptos: Algoritmos de optimización, procesamiento de datos financieros.
- 
Exercise 01: Reverse Polish Notation 
 Objetivo: Implementar una calculadora para evaluar expresiones en notación polaca inversa.
 Conceptos: Evaluación de expresiones, notación matemática.
- 
Exercise 02: PmergeMe 
 Objetivo: Implementar algoritmos de ordenación y procesamiento de datos utilizando técnicas de combinación.
 Conceptos: Algoritmos de ordenación, técnicas de combinación.
Si deseas contribuir al proyecto:
- Fork el repositorio.
- Crea una rama para tus cambios.
- Realiza los cambios necesarios.
- Envía un Pull Request describiendo los cambios realizados.
◦ Email gmacias-: gmacias-@student.42barcelona.com