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: ExtenderClaptrap
para crear la clase derivadaScavTrap
con 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 deClaptrap
yScavTrap
.
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 claseSerializer
para 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 claseSpan
para 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::stack
con una claseMutantStack
que 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