Structures de données C++
Les tableaux C/C++ vous permettent de définir des variables qui combinent plusieurs éléments de données du même type, mais structurés est un autre type de données défini par l'utilisateur qui vous permet de combiner des éléments de données de différents types.
Les structures sont utilisées pour représenter un enregistrement, supposons que vous vouliez garder une trace de vos livres dans une bibliothèque. Vous voudrez peut-être suivre les attributs suivants de chaque livre −
- Titre
- Auteur
- Sujet
- Identifiant du livre
Définir une structure
Pour définir une structure, vous devez utiliser l'instruction struct. L'instruction struct définit un nouveau type de données, avec plusieurs membres, pour votre programme. Le format de l'instruction struct est ceci −
struct [structure tag] { member definition; member definition; ... member definition; } [one or more structure variables];
La balise de structure est facultatif et chaque définition de membre est une définition de variable normale, telle que int i; ou flottant f ; ou toute autre définition de variable valide. A la fin de la définition de la structure, avant le dernier point-virgule, vous pouvez spécifier une ou plusieurs variables de structure mais c'est facultatif. Voici comment déclarer la structure Book −
struct Books { char title[50]; char author[50]; char subject[100]; int book_id; } book;
Accéder aux membres de la structure
Pour accéder à n'importe quel membre d'une structure, nous utilisons l'opérateur d'accès aux membres (.) . L'opérateur d'accès au membre est codé comme un point entre le nom de la variable de structure et le membre de structure auquel nous souhaitons accéder. Vous utiliseriez struct mot clé pour définir des variables de type structure. Voici l'exemple pour expliquer l'utilisation de la structure −
Démo en direct#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; }
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant −
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
Structures en tant qu'arguments de fonction
Vous pouvez passer une structure en tant qu'argument de fonction de la même manière que vous passez n'importe quelle autre variable ou pointeur. Vous accéderez aux variables de structure de la même manière que vous avez accédé dans l'exemple ci-dessus −
Démo en direct#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; }
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant −
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
Pointeurs vers des structures
Vous pouvez définir des pointeurs vers des structures de la même manière que vous définissez un pointeur vers toute autre variable comme suit −
struct Books *struct_pointer;
Maintenant, vous pouvez stocker l'adresse d'une variable de structure dans la variable de pointeur définie ci-dessus. Pour trouver l'adresse d'une variable de structure, placez l'opérateur &avant le nom de la structure comme suit −
struct_pointer = &Book1;
Pour accéder aux membres d'une structure à l'aide d'un pointeur vers cette structure, vous devez utiliser l'opérateur -> comme suit −
struct_pointer->title;
Réécrivons l'exemple ci-dessus en utilisant le pointeur de structure, espérons que ce sera facile pour vous de comprendre le concept −
Démo en direct#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; }
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant −
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
Le mot clé typedef
Il existe un moyen plus simple de définir des structures ou vous pouvez "aliaser" les types que vous créez. Par exemple −
typedef struct { char title[50]; char author[50]; char subject[100]; int book_id; } Books;
Vous pouvez désormais utiliser Livres directement pour définir les variables de Livres tapez sans utiliser le mot-clé struct. Voici l'exemple −
Books Book1, Book2;
Vous pouvez utiliser typedef mot-clé pour les non-structures ainsi que suit −
typedef long int *pint32; pint32 x, y, z;
x, y et z sont tous des pointeurs vers des entiers longs.
Langue C