Estructuras de datos de C++
Las matrices C/C++ le permiten definir variables que combinan varios elementos de datos del mismo tipo, pero estructura es otro tipo de datos definido por el usuario que le permite combinar elementos de datos de diferentes tipos.
Las estructuras se utilizan para representar un registro, suponga que desea realizar un seguimiento de sus libros en una biblioteca. Es posible que desee realizar un seguimiento de los siguientes atributos de cada libro:
- Título
- Autor
- Asunto
- Identificación del libro
Definición de una estructura
Para definir una estructura, debe usar la instrucción struct. La instrucción struct define un nuevo tipo de datos, con más de un miembro, para su programa. El formato de la instrucción struct es este −
struct [structure tag] { member definition; member definition; ... member definition; } [one or more structure variables];
La etiqueta de estructura es opcional y cada definición de miembro es una definición de variable normal, como int i; o flotante f; o cualquier otra definición de variable válida. Al final de la definición de la estructura, antes del punto y coma final, puede especificar una o más variables de estructura, pero es opcional. Esta es la forma en que declararías la estructura del Libro:
struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book;
Acceso a los miembros de la estructura
Para acceder a cualquier miembro de una estructura, usamos el operador de acceso a miembros (.) . El operador de acceso a miembros se codifica como un punto entre el nombre de la variable de estructura y el miembro de estructura al que deseamos acceder. Usarías estructura palabra clave para definir variables de tipo estructura. El siguiente es el ejemplo para explicar el uso de la estructura −
Demostración en vivo#include <iostream> #include <cstring> using namespace std; struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main() { struct Books Book1; // Declare Book1 of type Book struct Books Book2; // Declare Book2 of type Book // book 1 specification strcpy( Book1.title, "Learn C++ Programming"); strcpy( Book1.author, "Chand Miyan"); strcpy( Book1.subject, "C++ Programming"); Book1.book_id = 6495407; // book 2 specification strcpy( Book2.title, "Telecom Billing"); strcpy( Book2.author, "Yakit Singha"); strcpy( Book2.subject, "Telecom"); Book2.book_id = 6495700; // Print Book1 info cout << "Book 1 title : " << Book1.title <<endl; cout << "Book 1 author : " << Book1.author <<endl; cout << "Book 1 subject : " << Book1.subject <<endl; cout << "Book 1 id : " << Book1.book_id <<endl; // Print Book2 info cout << "Book 2 title : " << Book2.title <<endl; cout << "Book 2 author : " << Book2.author <<endl; cout << "Book 2 subject : " << Book2.subject <<endl; cout << "Book 2 id : " << Book2.book_id <<endl; return 0; }
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −
Book 1 title : Learn C++ Programming Book 1 author : Chand Miyan Book 1 subject : C++ Programming Book 1 id : 6495407 Book 2 title : Telecom Billing Book 2 author : Yakit Singha Book 2 subject : Telecom Book 2 id : 6495700
Estructuras como argumentos de función
Puede pasar una estructura como argumento de función de manera muy similar a como pasa cualquier otra variable o puntero. Accedería a las variables de estructura de la misma manera que lo hizo en el ejemplo anterior −
Demostración en vivo#include <iostream> #include <cstring> using namespace std; void printBook( struct Books book ); struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main() { struct Books Book1; // Declare Book1 of type Book struct Books Book2; // Declare Book2 of type Book // book 1 specification strcpy( Book1.title, "Learn C++ Programming"); strcpy( Book1.author, "Chand Miyan"); strcpy( Book1.subject, "C++ Programming"); Book1.book_id = 6495407; // book 2 specification strcpy( Book2.title, "Telecom Billing"); strcpy( Book2.author, "Yakit Singha"); strcpy( Book2.subject, "Telecom"); Book2.book_id = 6495700; // Print Book1 info printBook( Book1 ); // Print Book2 info printBook( Book2 ); return 0; } void printBook( struct Books book ) { cout << "Book title : " << book.title <<endl; cout << "Book author : " << book.author <<endl; cout << "Book subject : " << book.subject <<endl; cout << "Book id : " << book.book_id <<endl; }
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −
Book title : Learn C++ Programming Book author : Chand Miyan Book subject : C++ Programming Book id : 6495407 Book title : Telecom Billing Book author : Yakit Singha Book subject : Telecom Book id : 6495700
Punteros a Estructuras
Puede definir punteros a estructuras de una manera muy similar a como define un puntero a cualquier otra variable de la siguiente manera −
struct Books *struct_pointer;
Ahora, puede almacenar la dirección de una variable de estructura en la variable de puntero definida anteriormente. Para encontrar la dirección de una variable de estructura, coloque el operador &antes del nombre de la estructura de la siguiente manera −
struct_pointer = &Book1;
Para acceder a los miembros de una estructura usando un puntero a esa estructura, debe usar el operador -> de la siguiente manera −
struct_pointer->title;
Volvamos a escribir el ejemplo anterior usando el puntero de estructura, espero que le resulte fácil entender el concepto −
Demostración en vivo#include <iostream> #include <cstring> using namespace std; void printBook( struct Books *book ); struct Books { char title[50]; char author[50]; char subject[100]; int book_id; }; int main() { struct Books Book1; // Declare Book1 of type Book struct Books Book2; // Declare Book2 of type Book // Book 1 specification strcpy( Book1.title, "Learn C++ Programming"); strcpy( Book1.author, "Chand Miyan"); strcpy( Book1.subject, "C++ Programming"); Book1.book_id = 6495407; // Book 2 specification strcpy( Book2.title, "Telecom Billing"); strcpy( Book2.author, "Yakit Singha"); strcpy( Book2.subject, "Telecom"); Book2.book_id = 6495700; // Print Book1 info, passing address of structure printBook( &Book1 ); // Print Book1 info, passing address of structure printBook( &Book2 ); return 0; } // This function accept pointer to structure as parameter. void printBook( struct Books *book ) { cout << "Book title : " << book->title <<endl; cout << "Book author : " << book->author <<endl; cout << "Book subject : " << book->subject <<endl; cout << "Book id : " << book->book_id <<endl; }
Cuando el código anterior se compila y ejecuta, produce el siguiente resultado −
Book title : Learn C++ Programming Book author : Chand Miyan Book subject : C++ Programming Book id : 6495407 Book title : Telecom Billing Book author : Yakit Singha Book subject : Telecom Book id : 6495700
La palabra clave typedef
Hay una manera más fácil de definir estructuras o podría "alias" tipos que crea. Por ejemplo −
typedef struct { char title[50]; char author[50]; char subject[100]; int book_id; } Books;
Ahora, puedes usar Libros directamente para definir variables de Libros escriba sin usar la palabra clave struct. El siguiente es el ejemplo −
Books Book1, Book2;
Puedes usar typedef palabra clave para no estructuras, así como lo siguiente −
typedef long int *pint32; pint32 x, y, z;
x, y y z son punteros a enteros largos.
Lenguaje C
- Tipos de datos de C++
- Operadores de C++
- Comentarios de C++
- Tipo de datos Char de C++ con ejemplos
- Tecnología de almacenamiento de datos magnéticos de próxima generación
- Java - Estructuras de datos
- C - Estructuras
- C - definición de tipo
- Estructuras de datos de C++
- Abstracción de datos en C++
- Encapsulación de datos en C++