Uso de Structs

Al igual que para C, para C++ struct es la palabra clave que indica al compilador que se va a definir una estructura.

Para su definición, tal como dijimos en la página anterior hay que dar un nombre identificador a la estructura, y en lista de variables que vayan a estar agrupadas en las estructuras tal como se muestra a continuación.
Ejemplo:

struct Complex_t{
    double r;
    double i;
};

Inicialización

Para inicializar un struct en C según se definía, se podía hacer mediante el siguiente código:

struct Complex_t complex = {1, 1};
struct Complex_t complex = {.r = 1, .i = 1}; // With member name asociation

En C++ se inicializan según se definen de la misma forma, sin la necesidad de la palabra reservada struct antes del tipo de la variable, es decir:

Complex_t complex = {1, 1};
Complex_t complex = {.r = 1, .i = 1}; // With member name asociation

Aunque por retrocompatibilidad, también se puede utilizar la inicialización de C.

A partir del estándar C++11 tambien es posible la inicialización tal y como hacíamos para los tipos de datos primitivos, mediante:

Complex_t complex {1, 1};
Complex_t complex {.r = 1, .i = 1}; // With member name asociation

Aviso:

  • No es necesario inicializar un struct según se define.
  • La sintáxis de inicialización es válida para asignar nuevos valores, únicamente con estándares C++11 o posteriores.
  • En la sintáxis de inicilización utilizando los nombres de los miembros es necesario utilizar el mismo orden que en la definición del struct.

Escritura y lectura de los miembros

Esta estructura de complex tiene dos miembros real e imag, con tipo double en ambos casos. De esta manera si nosotros quiesiesemos declarar el número complejo 1+1i lo haríamos como se expone en el código siguiente:

Complex_t complex;
complex.r = 1;
complex.i = 1;

Pudiendo acceder a cada uno de los miembros mediante notación doteada:

cout << complex.r;  // 1
cout << complex.i;   // 1

Struct como parámetros

Al definir un struct puede utilizarse también como tipo de los parámetros de una función, tanto para la cabecera, como para la definición de la variable.

int magnitude(Complex_t);

/* Main */
// ...

int magnitude(Complex_t complex){
    ...
}

Referencias de Structs

Al igual que con otros tipos, se pueden realizar referencias a struct que tendrían el mismo acceso y uso que los alias a otros tipos.

Complex_t &ref_complex = complex;
ref_complex.r = 1;
ref_complex.i = 1;

cout<<complex.r;    // 1
cout<<complex.i;    // 1

Colecciones de Structs

También se pueden generar arrays y vectores de structs indicando el nombre del tipo en la declaración de dicho array o struct.

Complex_t complex_array[10];      // Array of 10 complex numbers
vector<Complex_t> complex_vector; // Vector of complex numbers

results matching ""

    No results matching ""