Usando Structs y Headers en C++

Hola a tod@s, continuando un poco con la temática C++, en el post de hoy vamos a hablar un poco sobre qué es un Header y como incluirlo en nuestro archivo principal, también vamos a hablar un poco sobre Struct, qué es, para que se utiliza, que se puede hacer con struct y como utilizarlo en nuestro proyecto C++.

Contenido

Entendiendo el problema

Puesto que el compilador de C++ lee cada línea del código de manera secuencial, es necesario que una función, clase, variable, estructura sea declarada antes de poder se utilizada.

int main() {
    int number;
    number = 10; // No existe ningún problema por que la variable se declaró antes
    printHello(); // Nos va a marcar un error puesto que la declaración de la función esta después

    return 0;
}

void printHello() {
    cout << "Hello World" << endl;
}

Para solucionar errores como el que se muestra arriba se pueden hacer lo siguiente:

Poner la función antes

void printHello() {
    cout << "Hello World" << endl;
}

int main() {
    int number;
    number = 10;
    printHello(); // Ahora no nos va marcar un error puesto que la función se encuentra antes de ser llamada

    return 0;
}

Declarar la función primero

void printHello(); // Declaración de la función

int main() {
    int number;
    number = 10; // No existe ningún problema por que la declaración esta antes
    printHello(); // Como la declaración de la función existe antes no vamos a tener error

    return 0;
}

void printHello() {
    cout << "Hello World" << endl;
}

Ahora viene el siguiente problema, ¿Qué pasa si necesitamos la misma función en otro archivo .cpp?
Para eso utilizaremos un Header

Header

Cuando los programas crecen se vuelve difícil mantener todo el código en el mismo lugar y tener que declarar las mismas funciones en los diferentes archivos .cpp puede ser un quebradero de cabeza al momento de dar mantenimiento a dicho programa. Para esto vienen ayudar las "cabeceras", cuyo propósito es mantener las declaraciones en un mismo lugar y luego usarlas desde donde necesitemos.

Las ""cabeceras" pueden tener extensión ".h" compatible con C y C++, ".hpp" solo para C++ o puede que no tengan extensión alguna, como el caso de iostream

include-header

La imagen fué tomada de: https://www.learncpp.com/cpp-tutorial/header-files/

Creando nuestro Header

void printHello(); // Declaración de la función

Guardamos nuestro archivo como "myheader.hpp"

Utilizando nuestro header

#include <iostream>
#include "myheader.hpp" // Tenemos que incluír el header

using namespace std;

int main() {
    printHello(); // Como la declaración de la función existe en nuestra cabecera no vamos a tener error

    return 0;
}

void printHello() {
    cout << "Hello World" << endl;
}

Guardamos nuestro archivo "main.cpp", compilamos y ejecutamos

Struct

Struct o Estructura en C++ es un tipo de "dato" estructurado, valga la redundancia, que nos permite agrupar varios datos que mantengan una relación aunque los mismos sean de distinto tipo, esto nos permite manipular dichos datos utilizando el mismo identificador.

Para declarar una estructura debemos tener en cuenta lo siguiente:

  • Se comienza con la palabra reservada struct seguida del nombre que queramos asignarle
  • Se colocan los datos que va a tener la estructura dentro de llaves {} como si fuera una función
  • Se termina la estructura con ; de lo contrario no va a compilar
struct Person {
    char name[50];
    char lastName[50];
    int age;
};

En el ejemplo superior la estructura "Person" tiene dos datos de tipo char y un dato de tipo int

A continuación vamos a utilizar nuestra estructura para crear una nueva "persona"

int main() {
    Person person; // Declaracion de una variable de tipo "Person"
    person = Person{"Jon", "Doe", 50} // Asignación de datos a "Person"

    /**
    * Para acceder a los datos de una estructura basta con hacer
    * referencia a la instancia de dicha esctructura seguida de
    * punto y el nombre de la variable deseada:
    * person.name o person.age
    **/
    cout << "Name is: " << person.name << endl;
    cout << "Last Name is: " << person.lastName << endl;
    cout <<"Age is: " << person.age << endl;

    return0;
}

Guardamos nuestro archivo "main.cpp" y compilamos
Al ejecutar nuestro archivo compilado nuestra respuesta será:

Name is: Jon
Last Name is: Doe
Age is: 50

Ahora la pregunta, ¿Qué pasa si necesitamos el mismo tipo de dato estructurado en otro archivo .cpp?

Pues podemos utilizar una cabecera para colocar ahí nuestra estructura

En el siguiente enlace (sección "Structs and Headers"), puedes ver el ejemplo completo, utilizando una estructura dentro de una cabecera.

https://github.com/nano-bytes/cpp-compilation

You may also like...