Enumerations et structures

Salut ce forum apprends les bases du c++

Moderator: Rick

Post Reply
Hydraxx
Site Admin
Posts: 114
Joined: Mon Jan 12, 2026 4:04 pm
Location: France
Contact:

Enumerations et structures

Post by Hydraxx »

ENUMERATIONS ET STRUCTURES

À QUOI ÇA SERT ?

Les enum servent à donner des noms compréhensibles à des valeurs.

Les struct servent à regrouper plusieurs données appartenant au même objet logique.


1. POURQUOI UTILISER UNE ENUM


Sans enum :

Code: Select all

int state = 2;
Que signifie 2 ?

Impossible à savoir sans documentation.

Avec :

Code: Select all

enum class State
{
    Stopped,
    Running,
    Failed
};
Puis :

Code: Select all

State state{State::Running};
Le code devient immédiatement lisible.


2. enum class


Exemple :

Code: Select all

enum class ProcessState
{
    Created,
    Running,
    Waiting,
    Terminated
};
Accès :

Code: Select all

ProcessState::Running
Pourquoi enum class est meilleur que les anciennes enum ?

Parce qu’il évite la pollution de la portée et les conversions implicites dangereuses.


3. TYPE SOUS-JACENT

Code: Select all

enum class Opcode : std::uint8_t
{
    Read  = 1,
    Write = 2,
    Close = 3
};
Pourquoi préciser uint8_t ?

Parce qu’on veut que la représentation utilise exactement un octet.

Très utile dans :
  • protocoles réseau ;
  • fichiers binaires ;
  • commandes matérielles.

4. STRUCT

Code: Select all

struct ProcessInfo
{
    std::uint32_t pid;
    std::uint64_t memory;
    bool running;
};
Pourquoi une struct ?

Parce que ces trois données décrivent le même objet logique : un processus.

Sans structure :

Code: Select all

uint32_t pid;
uint64_t memory;
bool running;
on perd le regroupement logique.


5. INITIALISATION

Code: Select all

ProcessInfo p{
    1234,
    4096,
    true
};
Ou avec designated initializers :

Code: Select all

ProcessInfo p{
    .pid = 1234,
    .memory = 4096,
    .running = true
};

6. PADDING


Très important en bas niveau.

Code: Select all

struct Example
{
    char c;
    int i;
};
Tu pourrais penser :

1 octet + 4 octets = 5 octets.

Mais sizeof(Example) peut être 8.

Pourquoi ?

Le compilateur ajoute du padding pour respecter l’alignement de int.

Représentation possible :

Code: Select all

offset 0 : char c
offset 1 : padding
offset 2 : padding
offset 3 : padding
offset 4 : int i
offset 5
offset 6
offset 7
Cela compte énormément pour :
  • structures de drivers ;
  • formats binaires ;
  • réseau ;
  • mémoire partagée ;
  • ABI.

7. struct ET class


En C++, elles sont presque identiques.

Différence par défaut :

struct :
membres publics.

class :
membres privés.

Donc ceci est valide :

Code: Select all

struct Counter
{
    void increment()
    {
        ++value;
    }

    int value{};
};
Une struct peut avoir des méthodes, constructeurs et destructeurs.


À RETENIR


enum = donner un nom à des états ou codes.
struct = regrouper des données liées.

Pour le système, pense aussi :
  • type sous-jacent ;
  • padding ;
  • alignement ;
  • taille réelle en mémoire.

Return to “Bases du C++”

Who is online

Users browsing this forum: No registered users and 0 guests