Structs en C++ explicados con un ejemplo práctico
¿Qué es un struct en C++?
Un STRUCT es una estructura de datos de C++ que permite almacenar juntos elementos de diferentes tipos de datos. En C++, una estructura es un tipo de dato definido por el usuario. La estructura crea un tipo de dato para agrupar elementos de distintos tipos bajo un único tipo de dato.
Por ejemplo:
Supongamos que necesita almacenar información sobre alguien: su nombre, nacionalidad y edad. Puede crear variables como nombre, nacionalidad y edad para almacenar los datos por separado.
Sin embargo, puede que en el futuro necesite almacenar información sobre muchas personas. Eso significa que se crearán variables para diferentes individuos. Por ejemplo, nombre1, nacionalidad1, edad1, etc. Para evitar esto, es mejor crear un struct.
En este tutorial de C++ aprenderá:
- Qué es un Struct en C++
- Cuándo usar una estructura
- Inicialización de struct en C++
- Creación de instancias de struct
- Acceso a miembros de struct
- Punteros a estructura
- Struct como argumento de función
- Limitación de una estructura en C++
Cuándo usar una estructura
Aquí hay algunas razones para usar estructuras en C++:
- Use un struct cuando necesite almacenar elementos de diferentes tipos de datos bajo un solo tipo de dato.
- Los structs de C++ son un tipo de valor en lugar de tipo referencia. Use un struct si no tiene intención de modificar sus datos después de la creación.
Inicialización de struct en C++
Para crear una estructura en C++, usamos la palabra clave struct, seguida de un identificador. El identificador se convierte en el nombre del struct. Aquí está la sintaxis para crear un struct en C++:
Sintaxis:
struct nombre_struct {
// miembros del struct
}
En la sintaxis anterior, hemos usado la palabra clave struct. El nombre_struct es el nombre de la estructura.
Los miembros del struct se añaden entre llaves. Estos miembros probablemente pertenecen a diferentes tipos de datos.
Por ejemplo:
struct Persona {
char nombre[30];
int nacionalidad;
int edad;
}
En el ejemplo anterior, Persona es una estructura con tres miembros. Los miembros incluyen nombre, nacionalidad y edad. Un miembro es de tipo char, mientras que los dos restantes son enteros. Cuando se crea una estructura, no se asigna memoria. La memoria solo se asigna después de que se añade una variable al struct.
Creación de instancias de struct
En el ejemplo anterior, hemos creado un struct llamado Persona. Podemos crear una variable de struct como sigue:
Persona p;
La variable p es una variable de struct de tipo Persona. Podemos usar esta variable para acceder a los miembros del struct.
Acceso a miembros de struct
Para acceder a los miembros del struct, usamos la instancia del struct y el operador punto (.). Por ejemplo, para acceder al miembro edad del struct Persona:
p.edad = 27;
Hemos accedido al miembro edad del struct Persona usando la instancia del struct, p. Luego hemos establecido el valor del miembro edad a 27.
Ejemplo 1:
#include <iostream>
using namespace std;
struct Persona {
int nacionalidad;
int edad;
};
int main(void) {
struct Persona p;
p.nacionalidad = 1;
p.edad = 27;
cout << "Nacionalidad de la persona: " << p.nacionalidad << endl;
cout << "Edad de la persona: " << p.edad << endl;
return 0;
}
Salida:

Captura del código:

Explicación del código:
- Incluya la cabecera iostream para usar sus funciones.
- Incluya el espacio de nombres std para usar sus clases sin llamarlas.
- Cree un struct llamado Persona.
- Inicio del cuerpo del struct.
- Cree miembro del struct llamado nacionalidad de tipo entero.
- Cree miembro del struct llamado edad de tipo entero.
- Fin del cuerpo del struct.
- Llame a la función main(). La lógica del programa debe añadirse en su cuerpo.
- Cree una instancia del struct Persona dándole el nombre p.
- Establezca el valor del miembro nacionalidad a 1.
- Establezca el valor del miembro edad a 27.
- Imprima el valor del miembro nacionalidad en consola junto con otro texto.
- Imprima el valor del miembro edad en consola junto con otro texto.
- El programa debe retornar un valor si se ejecuta exitosamente.
- Fin de la función main().
Punteros a estructura
Es posible crear un puntero que apunte a una estructura. Es similar a cómo se crean punteros que apuntan a tipos de datos nativos como int, float, double, etc. Note que un puntero en C++ almacenará una ubicación de memoria.
Ejemplo 2:
#include <iostream>
using namespace std;
struct Longitud {
int metros;
float centimetros;
};
int main() {
Longitud *ptr, l;
ptr = &l;
cout << "Ingrese metros: ";
cin >> (*ptr).metros;
cout << "Ingrese centímetros: ";
cin >> (*ptr).centimetros;
cout << "Longitud = " << (*ptr).metros << " metros " << (*ptr).centimetros << " centímetros";
return 0;
}
Salida:

Captura del código:

Explicación del código:
- Incluya iostream para usar sus funciones.
- Incluya espacio de nombres std.
- Cree un struct llamado Longitud.
- Inicio del cuerpo del struct Longitud.
- Cree miembro metros de tipo entero.
- Cree miembro centímetros de tipo float.
- Fin del cuerpo del struct Longitud.
- Llame a main().
- Inicio del cuerpo de main().
- Cree variable puntero *ptr y variable normal l de tipo Longitud.
- Almacene la dirección de l en ptr.
- Muestre mensaje pidiendo al usuario ingresar valor para metros.
- Lea valor ingresado por teclado. El miembro metros se accede via puntero.
- Muestre mensaje pidiendo valor para centímetros.
- Lea valor ingresado. El miembro centímetros se accede via puntero.
- Muestre valores leídos en consola junto con texto.
- El programa debe retornar valor al completarse exitosamente.
- Fin del cuerpo de main().
Struct como argumento de función
Puede pasar un struct a una función como argumento. Esto se hace de la misma forma que pasar un argumento normal. Las variables de struct también pueden pasarse a una función. Un buen ejemplo es cuando necesita mostrar los valores de los miembros del struct. Demostremos esto:
Ejemplo 3:
#include<iostream>
using namespace std;
struct Persona {
int nacionalidad;
int edad;
};
void func(struct Persona p);
int main() {
struct Persona p;
p.nacionalidad = 1;
p.edad = 27;
func(p);
return 0;
}
void func(struct Persona p) {
cout << " Nacionalidad: " << p.nacionalidad<<endl;
cout << " Edad: " << p.edad;
}
Salida:

Captura del código:

Explicación del código:
- Incluya iostream para usar sus funciones sin errores.
- Incluya espacio de nombres std.
- Cree struct Persona.
- Inicio del cuerpo del struct Persona.
- Cree miembro nacionalidad de tipo entero.
- Cree miembro edad de tipo entero.
- Fin del cuerpo del struct Persona.
- Cree función que tome instancia de struct Persona, p, como argumento.
- Llame a main(). La { marca inicio del cuerpo de main().
- Cree instancia de struct Persona llamada p.
- Acceda a miembro nacionalidad usando instancia p y asígnele valor 1.
- Acceda a miembro edad usando instancia p y asígnele valor 27.
- Llame a función pasando instancia p como argumento.
- La función debe retornar valor al completarse exitosamente.
- Fin del cuerpo de main().
- Cree cuerpo de la función.
- Inicio del cuerpo de la función.
- Acceda a valor nacionalidad e imprímalo en consola con texto.
- Acceda a valor edad e imprímalo en consola con texto.
- Fin del cuerpo de la función.
Limitación de una estructura en C++
Las siguientes son las limitaciones de las estructuras:
- El tipo de dato struct no puede tratarse como tipos de datos integrados.
- Operadores como +, -, y otros no pueden usarse en variables de estructura.
- Las estructuras no soportan ocultamiento de datos. Los miembros de una estructura pueden ser accedidos por cualquier función sin importar su ámbito.
- No se pueden declarar miembros estáticos dentro del cuerpo de la estructura.
- No se pueden crear constructores dentro de una estructura.
Resumen:
- Un struct es una estructura de datos que almacena elementos de diferentes tipos.
- Mientras un array almacena elementos de tipo similar, un struct almacena elementos de diferentes tipos.
- Un struct debe usarse cuando los elementos de datos no se espera que cambien de valor.
- Los miembros de un struct se acceden usando el operador punto (.).
- Debemos crear una instancia del struct.
- Para crear un struct en C++, usamos la palabra clave struct.
- Los punteros que apuntan a un struct se crean similarmente a punteros a tipos regulares.
- Un struct puede pasarse como argumento a una función igual que funciones ordinarias.
Lenguaje C
- Dominando structs y punteros en C: Guía práctica
- Operadores en C++ explicados: Tipos, ejemplos y programas de muestra
- Bucle do‑while en C++: Sintaxis, ejemplos prácticos y bucles anidados
- Dominando switch-case en C++: Sintaxis, uso y ejemplos prácticos
- Asignación dinámica de arrays en C++: Guía práctica con ejemplos de código
- Dominando punteros en C++: Conceptos, ejemplos y aplicaciones prácticas
- Dominando el tipo de dato char en C++: Declaración, ASCII y técnicas de conversión
- Sobrecarga de operadores en C++: Guía práctica con ejemplos de código
- Dominar std::list en C++: Sintaxis, Funciones y Ejemplos Prácticos
- Funciones en C++ Explicadas con Ejemplos de Código Prácticos
- Struct vs Class en C++: Diferencias Clave, Sintaxis y Mejores Casos de Uso