Skip to content

Latest commit

 

History

11 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧬 CPP Module 06 – C++ Casteos y Conversiones de Tipos

Objetivo: Dominar el uso de conversiones en C++ (static_cast, dynamic_cast, reinterpret_cast y const_cast), la serialización de punteros y la identificación de tipos en tiempo de ejecución sin RTTI. ✅ Nivel: Avanzado ✅ Temas clave: static_cast, reinterpret_cast, dynamic_cast, const_cast, parsing de literales, manejo de pseudo-literals, serialización de punteros, polimorfismo y detección de tipos sin typeid.


📚 Tabla de Contenidos

  1. Regla Adicional del Módulo
  2. Ejercicio 00 – ScalarConverter
  3. Ejercicio 01 – Serializer
  4. Ejercicio 02 – Identify real type
  5. Tabla Resumen de Casteos
  6. Errores Comunes
  7. Buenas Prácticas

🔹 1. Regla Adicional del Módulo

📘 Obligatorio: En cada ejercicio se debe de usar el cast específico indicado (static_cast, reinterpret_cast, dynamic_cast, etc.) para la conversión de tipos.


Ejercicio 00 – ScalarConverter

Cast usado: static_cast

Explicación: Se detecta el tipo del literal (char, int, float, double) y se convierte explícitamente a los demás tipos escalares. static_cast es apropiado porque:

  • Funciona en tiempo de compilación para tipos compatibles.
  • Realiza una conversión semántica, no reinterpretación de bits.
  • Es seguro para conversiones numéricas y de tipos integrales a char (controlando rangos).

Ejemplo:

int i = static_cast<int>(myDouble);
char c = static_cast<char>(i);

Ejercicio 01 – Serializer

Cast usado: reinterpret_cast

Explicación: Convierte un puntero (Data*) a un entero sin signo (uintptr_t) y viceversa, sin alterar el contenido al que apunta. reinterpret_cast es necesario porque:

  • Permite reinterpretar la memoria sin conversión semántica, manteniendo los bits idénticos.
  • No hay relación de herencia ni conversión numérica estándar.
  • Es el cast habitual para serializar punteros.

Ejemplo:

uintptr_t raw = reinterpret_cast<uintptr_t>(ptr);
Data* ptr2 = reinterpret_cast<Data*>(raw);

Ejercicio 02 – Identify real type

Cast usado: dynamic_cast

Explicación: Permite detectar en tiempo de ejecución el tipo real de un objeto apuntado o referenciado como clase base (Base). dynamic_cast es el más seguro porque:

  • Funciona en jerarquías polimórficas con al menos un método virtual.
  • Comprueba el tipo en tiempo de ejecución usando RTTI.
  • Devuelve nullptr si falla en punteros y lanza std::bad_cast en referencias.

Ejemplo:

if (dynamic_cast<A*>(p)) std::cout << "A\n";

📊 Tabla Resumen de Casteos

Ejercicio Cast usado Razón principal
00 – ScalarConverter static_cast Conversión semántica segura entre tipos escalares
01 – Serializer reinterpret_cast Reinterpretación de bits entre puntero y entero
02 – Identify type dynamic_cast Downcasting seguro en jerarquías polimórficas

🔹 5. Errores Comunes

❌ Usar typeid o <typeinfo> (prohibido) ❌ No manejar pseudo-literals (nan, +inf, etc.) en ScalarConverter ❌ Olvidar virtual en el destructor de Base → comportamiento indefinido ❌ Usar un cast inadecuado (ej. reinterpret_cast en vez de static_cast)


🔹 6. Buenas Prácticas

✅ Elegir el cast más seguro posible para cada caso ✅ Documentar cada conversión explicando su necesidad ✅ Mantener ScalarConverter y Serializer como clases no instanciables ✅ Asegurar salida clara y formateada para todos los tipos ✅ Validar límites y conversiones imposibles antes de mostrar resultados


Autor 🤝💡📬


Licencia 📜✅🗝️

Este proyecto está bajo la licencia MIT.

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages