Ingeniería en comunicaciones y electrónica
Tema 2.1.1 del Plan de Estudios de POO IPN
¡Bienvenidos a una nueva clase STEAMdiantes! como ingenieros, a menudo nos encontraremos con conceptos que son fundamentales pero que al principio pueden parecer un poco abstractos. Hoy explicaremos tres de estas piedras angulares en la programación con C++: las estructuras (struct), las uniones (union) y las clases (class). Entender sus diferencias y aplicaciones es crucial para escribir código eficiente y bien organizado. ¡Vamos a ello!
Estructuras (struct)
Imagina que necesitas almacenar información sobre un estudiante: su nombre, su edad y su calificación. Podrías usar variables separadas como en el siguiente código:
std::string nombreEstudiante = "Juan Perez";
int edadEstudiante = 20;
float calificacionEstudiante = 9.5;Esto funciona, pero es un poco desordenado. ¿No sería genial poder agrupar toda esta información bajo un solo tipo de dato? ¡para eso existen las estructuras!
Una estructura o struct es un tipo de dato definido por el usuario que agrupa variables de diferentes tipos bajo un mismo nombre, piensa en ello como un formulario o una ficha de datos. Son útiles para representar entidades con múltiples atributos.
Ejemplo de una estructura (struct) en C++:
#include <iostream>
#include <string>
// Definimos nuestra estructura "Estudiante"
struct Estudiante {
std::string nombre;
int edad;
float calificacion;
};
int main() {
// Creamos una variable del tipo Estudiante
Estudiante alumno1;
// Asignamos valores a sus miembros
alumno1.nombre = "Ana Lopez";
alumno1.edad = 22;
alumno1.calificacion = 8.8;
// Accedemos a los miembros para mostrarlos
std::cout << "Nombre: " << alumno1.nombre << std::endl;
std::cout << "Edad: " << alumno1.edad << std::endl;
std::cout << "Calificación: " << alumno1.calificacion << std::endl;
return 0;
}En este ejemplo, Estudiante es nuestro nuevo tipo de dato. nombre, edad y calificacion son sus miembros. Para acceder a ellos, usamos el operador punto (.). Sencillo, ¿verdad? todos los miembros de una estructura coexisten en memoria y, por defecto, son de acceso público, lo que significa que puedes acceder a ellos directamente desde cualquier parte de tu código.
Uniones (union)
Ahora, hablemos de las uniones o union. Este es un tipo de dato más especializado. Al igual que una estructura, puede contener varios miembros de diferentes tipos, pero con una diferencia clave: solo puede almacenar el valor de uno de sus miembros a la vez.
¿Cómo es esto posible? una unión reserva un espacio de memoria lo suficientemente grande como para contener a su miembro más grande. Todos los miembros de la unión comparten ese mismo espacio de memoria.
Ejemplo de una unión:
#include <iostream>
union Dato {
int i;
float f;
char c[4];
};
int main() {
Dato miDato;
miDato.i = 10;
std::cout << "Como entero: " << miDato.i << std::endl;
miDato.f = 220.5;
std::cout << "Como flotante: " << miDato.f << std::endl;
// ¡Cuidado! El valor de 'i' ha sido sobrescrito.
// Imprimir miDato.i ahora daría un resultado inesperado.
std::cout << "El valor original del entero se ha perdido." << std::endl;
return 0;
}El tamaño de la unión Dato será el tamaño de su miembro más grande (probablemente float o char[4], dependiendo de la arquitectura del sistema). Cuando asignamos un valor a miDato.f, estamos utilizando el mismo espacio de memoria donde antes estaba miDato.i.
Las uniones son útiles en situaciones donde se necesita ahorrar memoria y se sabe que solo se necesitará uno de los posibles tipos de datos en un momento dado.
Clases (class)
Finalmente, llegamos a la joya de la corona de C++: la palabra reservada class. A primera vista, una clase puede parecer muy similar a una estructura. De hecho, en C++, la única diferencia técnica entre un struct y una class es el nivel de acceso por defecto de sus miembros.
- En un struct, los miembros son públicos por defecto.
- En una class, los miembros son privados por defecto.
Pero esta pequeña diferencia abre la puerta a un paradigma de programación completamente nuevo: la Programación Orientada a Objetos (POO).
Una clase no solo agrupa datos (atributos), sino también las funciones que operan sobre esos datos (métodos). Esto se conoce como encapsulación.
Ejemplo de una clase:
#include <iostream>
#include <string>
class Vehiculo {
private: // Los miembros privados solo son accesibles desde dentro de la clase
std::string marca;
int anio;
public: // Los miembros públicos forman la interfaz de la clase
// Constructor: un método especial para inicializar objetos
Vehiculo(std::string m, int a) {
marca = m;
anio = a;
}
// Método para mostrar la información
void mostrarInfo() {
std::cout << "Marca: " << marca << ", Año: " << anio << std::endl;
}
};
int main() {
// Creamos un objeto (una instancia) de la clase Vehiculo
Vehiculo miCoche("Ford", 2023);
// Llamamos a un método público del objeto
miCoche.mostrarInfo();
// Esto generaría un error de compilación porque 'marca' es privado:
// miCoche.marca = "Nissan";
return 0;
}Al hacer los datos marca y anio privados, protegemos el estado interno de nuestro objeto Vehiculo. Solo podemos interactuar con él a través de la interfaz pública que hemos definido (el constructor y el método mostrarInfo). Esto ayuda a prevenir modificaciones accidentales y a mantener nuestro código más robusto y fácil de mantener.
¿Como debo usarlos al programar?
Usa un struct cuando quieras agrupar datos de forma pasiva, sin una lógica compleja asociada. Piensa en coordenadas, registros de una base de datos, etc.
Usa una union en escenarios muy específicos de programación de sistemas o embebidos donde la gestión de la memoria es crítica.
Usa una class para todo lo demás. Es la base de la Programación Orientada a Objetos en C++ y te permite crear tipos de datos complejos con comportamientos bien definidos, promoviendo un código más limpio, seguro y reutilizable.
Espero que esta explicación te haya aclarado el panorama. ¡Sigue programando y no dejes de experimentar con estos conceptos! Son las herramientas que te permitirán construir sistemas de software cada vez más potentes y elegantes.
Gracias por leernos.
Si te gusto este artículo, únete a nuestra comunidad en Facebook o WhatsApp para más…
¡Hasta la próxima!



