Le Guide complet des Struct en C++

Le Guide complet des Struct en C++

Amine Abidi - Lead Software Engineer C++/Qt - Co-fondateur PointerLab

Publié par Amine Abidi - Lead Software Engineer C++/Qt - Co-fondateur PointerLab

Structs en C++ expliquées : Théorie, Exemples et Quiz

Les structures (struct) en C++ sont des types de données définis par l'utilisateur qui permettent de regrouper différents types de données sous un même nom. Dans cet article complet, nous allons explorer tous les aspects des structures en C++. Si vous vous interrogez sur la différence entre les structures et les classes, je vous invite à consulter mon article dédié à ce sujet.

Qu'est-ce qu'une Structure en C++ ?

Une structure est un type de données composé qui permet de regrouper plusieurs variables, même de types différents, sous un même nom. C'est un outil fondamental en C++ pour organiser des données connexes.

C++ et Struct - Les Bases

Les structures sont essentielles en C++ pour :

  • Regrouper des données liées
  • Créer des types de données personnalisés
  • Organiser le code de manière logique

Syntaxe de Base

struct NomStructure {
    type1 membre1;
    type2 membre2;
    // ...
};

Exemple Simple

struct Personne {
    std::string nom;
    int age;
    double taille;
};

Initialisation des Structures

Il existe plusieurs façons d'initialiser une structure :

// Méthode 1 : Initialisation uniforme
Personne p1 = {"Jean", 25, 1.75};

// Méthode 2 : Initialisation membre par membre
Personne p2;
p2.nom = "Marie";
p2.age = 30;
p2.taille = 1.68;

// Méthode 3 : Constructeur (C++ moderne)
struct Personne {
    Personne(std::string n, int a, double t) 
        : nom(n), age(a), taille(t) {}
    std::string nom;
    int age;
    double taille;
};

Constructeurs dans les Structures

Les structures peuvent avoir des constructeurs comme les classes :

struct Point {
    Point() : x(0), y(0) {} // Constructeur par défaut
    Point(int x_val, int y_val) : x(x_val), y(y_val) {} // Constructeur paramétré
    int x;
    int y;
};

Accès aux Membres

Opérateur Point (.)

Personne p;
p.nom = "Pierre";

Opérateur Flèche (->)

Personne* ptr = &p;
ptr->nom = "Pierre";

Structures Nommées vs Anonymes

// Structure nommée
struct Coordonnees {
    int x, y;
};

// Structure anonyme
struct {
    int x, y;
} point;

Utilisation Avancée des Structures

Tableaux de Structures

Personne groupe[3] = {
    {"Jean", 25, 1.75},
    {"Marie", 30, 1.68},
    {"Pierre", 35, 1.82}
};

Structures Imbriquées

struct Adresse {
    std::string rue;
    std::string ville;
    int codePostal;
};

struct Employe {
    std::string nom;
    Adresse adresse;
    double salaire;
};

Quiz sur les Structures C++

  1. Question : Qu'est-ce qu'une structure en C++ ?

    • Réponse : Une structure est un type de données composé qui permet de regrouper plusieurs variables de différents types sous un même nom.
  2. Question : Vrai ou Faux : Les structures en C++ peuvent contenir des fonctions membres.

    • Réponse : Vrai. En C++, les structures peuvent contenir des fonctions membres tout comme les classes.
  3. Question : Comment accède-t-on à un membre d'une structure via un pointeur ?

    • Réponse : On utilise l'opérateur flèche (->). Exemple : ptr->membre
  4. Question : Quelle est la différence entre une structure nommée et une structure anonyme ?

    • Réponse : Une structure nommée définit un nouveau type qui peut être réutilisé, tandis qu'une structure anonyme crée directement des variables sans définir de type réutilisable.
  5. Question : Peut-on avoir un constructeur dans une structure C++ ?

    • Réponse : Oui, les structures en C++ peuvent avoir des constructeurs tout comme les classes.
  6. Question : Que se passe-t-il si on ne spécifie pas d'initialisations pour certains membres d'une structure ?

    • Réponse : Les membres de type fondamental ne sont pas initialisés (valeurs indéterminées), tandis que les objets membres sont initialisés par leur constructeur par défaut.
  7. Question : Comment peut-on empêcher l'héritage d'une structure ?

    • Réponse : En utilisant le mot-clé 'final'. Exemple : struct MaStructure final { };
  8. Question : Quelle est la taille d'une structure vide en C++ ?

    • Réponse : Une structure vide a une taille minimale de 1 byte pour garantir que différentes instances aient des adresses distinctes.
  9. Question : Comment fonctionne l'alignement mémoire des membres d'une structure ?

    • Réponse : Les membres sont alignés selon leur type le plus grand pour optimiser l'accès mémoire, ce qui peut créer du "padding" entre les membres.
  10. Question : Peut-on utiliser un template avec une structure ?

    • Réponse : Oui, on peut créer des structures template en C++. Exemple :
    template<typename T>
    struct Pair {
        T first;
        T second;
    };
    

Conclusion

Les structures en C++ sont un outil puissant pour organiser les données et créer des types personnalisés. Leur flexibilité et leur simplicité en font un élément fondamental de la programmation en C++.

Découvrez l'ensemble de notre blog sur le C++

Rejoignez la communauté C++ 🇫🇷 sur Discord !

Un espace convivial pour échanger et apprendre ensemble.