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
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.