cpp-structs

Qué son y cómo usar `structs` en C++

En C++, un struct es una estructura de datos que permite agrupar varias variables bajo un solo nombre.

Los structs son particularmente útiles cuando trabajamos con tipos de datos simples que tienen un tamaño predecible y se utilizan principalmente para representar datos que deben ser agrupados.

En C++ una struct es prácticamente igual que una clase
La única diferencia es la visibilidad por defecto, que es public en las struct y private en las clases.

Sintaxis de las structs

La sintaxis básica para definir una estructura en C++ es la siguiente:

struct NombreDeLaEstructura {
    // Definición de campos
    TipoDeDato Campo1;
    TipoDeDato Campo2;

    // Definición de métodos, propiedades, etc.
};
  • NombreDeLaEstructura: Es el nombre único que se le da a la estructura.
  • TipoDeDato: Especifica el tipo de datos de los campos dentro de la estructura.

Ejemplo Básico

A continuación, se muestra un ejemplo básico de cómo definir y utilizar una estructura en C++:

#include <iostream>

struct Punto {
    int X;
    int Y;

    Punto(int x, int y) : X(x), Y(y) {}

    void ImprimirCoordenadas() const {
        std::cout << "Coordenadas: (" << X << ", " << Y << ")" << std::endl;
    }
};

int main() {
    Punto punto(3, 5);
    punto.ImprimirCoordenadas(); // Imprime "Coordenadas: (3, 5)"
    return 0;
}

Uso de structs

Declaración e inicialización

Las estructuras se declaran e inicializan de manera similar a las variables de otros tipos de datos.

Punto punto;
punto.X = 3;
punto.Y = 5;

// Inicialización usando el constructor
Punto otroPunto(7, 8);

Acceso a campos

Los campos de una estructura se acceden utilizando la notación de punto (.).

int x = punto.X;
int y = punto.Y;

Inicialización de structs

Las structs pueden inicializarse de varias maneras, incluyendo la inicialización lista y el uso de constructores.

Inicialización Lista

Persona p = {"Juan", 30, 1.75};

Constructores en structs

Aunque es más común en clases, las structs también pueden tener constructores.

struct Persona {
    std::string nombre;
    int edad;
    float altura;

    // Constructor
    Persona(std::string n, int e, float a) : nombre(n), edad(e), altura(a) {}
};

Anidar structs

Las structs pueden anidarse dentro de otras structs, permitiendo la creación de estructuras de datos más complejas.

struct Fecha {
    int dia;
    int mes;
    int año;
};

struct Persona {
    std::string nombre;
    Fecha fechaNacimiento;
};

En el ejemplo,

  • Definimos la struct Fecha
  • Definimos la struct Persona, que usa Fecha

Ejemplos prácticos

Representación de un punto en un plano cartesiano

En este ejemplo, se define una estructura que representa un punto en un plano cartesiano.

#include <iostream>

struct Punto {
    int X; // Coordenada X del punto
    int Y; // Coordenada Y del punto

    Punto(int x, int y) : X(x), Y(y) {}
};

int main() {
    Punto punto(3, 4);
    std::cout << "Punto: (" << punto.X << ", " << punto.Y << ")" << std::endl; // Imprime "Punto: (3, 4)"
    return 0;
}

Representación de un color RGB

En este ejemplo, se define una estructura que representa un color en formato RGB.

#include <iostream>

struct ColorRGB {
    unsigned char Rojo; // Componente roja del color
    unsigned char Verde; // Componente verde del color
    unsigned char Azul; // Componente azul del color

    ColorRGB(unsigned char rojo, unsigned char verde, unsigned char azul)
        : Rojo(rojo), Verde(verde), Azul(azul) {}
};

int main() {
    ColorRGB color(255, 0, 0); // Color rojo
    std::cout << "Color RGB: (" << (int)color.Rojo << ", " << (int)color.Verde << ", " << (int)color.Azul << ")" << std::endl; // Imprime "Color RGB: (255, 0, 0)"
    return 0;
}

Representación de una fecha

En este ejemplo, se define una estructura que representa una fecha.

#include <iostream>

struct Fecha {
    int Dia; // Día del mes
    int Mes; // Mes del año
    int Año; // Año

    Fecha(int dia, int mes, into) : Dia(dia), Mes(mes), Año(año) {}
};

int main() {
    Fecha fecha(5, 6, 2023);
    std::cout << "Fecha: " << fecha.Dia << "/" << fecha.Mes << "/" << fecha.Año << std::endl; // Imprime "Fecha: 5/6/2023"
    return 0;
}

Representación de un rectángulo

En este ejemplo, se define una estructura que representa un rectángulo y se incluye un método para calcular su área.

#include <iostream>

struct Rectangulo {
    int Ancho; // Ancho del rectángulo
    int Alto; // Alto del rectángulo

    Rectangulo(int ancho, int alto) : Ancho(ancho), Alto(alto) {}

    int CalcularArea() const {
        return Ancho * Alto;
    }
};

int main() {
    Rectangulo rectangulo(5, 10);
    int area = rectangulo.CalcularArea();
    std::cout << "Área del rectángulo: " << area << std::endl; // Imprime "Área del rectángulo: 50"
    return 0;
}