Menu
Coddy logo textTech

Structs comme objets

Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 6 sur 61.

Dans les langages orientés objet, un objet est une entité qui regroupe des données (état) et des fonctions qui opèrent sur ces données (méthodes). C ne possède pas d’objets intégrés, mais nous pouvons obtenir le même concept en utilisant des structures et des fonctions.

Considérez une struct comme la partie « données » d’un objet. Elle contient l’état : les valeurs qui définissent ce qu’est actuellement l’objet :

typedef struct {
    int value;
} Counter;

Cette structure Counter représente une entité avec un seul élément d’état : sa valeur actuelle. Pour lui donner un comportement, nous écrivons des fonctions qui acceptent la structure comme paramètre :

void counter_increment(Counter *c) {
    c->value++;
}

int counter_get(Counter *c) {
    return c->value;
}

Ces fonctions se comportent comme des méthodes. Elles opèrent spécifiquement sur les données Counter. En transmettant la struct aux fonctions, nous simulons ce que d’autres langages font automatiquement lorsque vous appelez counter.increment().

int main() {
    Counter my_counter = {0};
    counter_increment(&my_counter);
    printf("%d\n", counter_get(&my_counter)); // Affiche : 1
    return 0;
}

La convention de nommage typename_action (comme counter_increment) aide à organiser votre code et indique clairement à quelle struct appartient une fonction. Ce modèle constitue le fondement de la programmation orientée objet en C.

challenge icon

Défi

Facile

Construisons un module Counter simple qui traite une structure comme un objet doté d’un comportement. Vous organiserez votre code sur trois fichiers afin de vous exercer au modèle consistant à regrouper des données avec les fonctions qui les manipulent.

Vous créerez trois fichiers :

  • counter.h : votre fichier d’en-tête déclarant la structure Counter avec un unique membre int value. Déclarez également deux fonctions qui jouent le rôle de « méthodes » pour le compteur : counter_increment (prend un pointeur vers Counter et augmente sa valeur de 1) et counter_get (prend un pointeur vers Counter et renvoie sa valeur actuelle). Utilisez des gardes d’inclusion avec le symbole COUNTER_H.
  • counter.c : votre fichier source implémentant les deux fonctions. N’oubliez pas d’inclure votre fichier d’en-tête.
  • main.c : votre fichier principal qui crée un Counter, effectue des opérations dessus et affiche les résultats.

Vous recevrez deux entrées entières : la valeur de départ de votre compteur et le nombre de fois où l’incrémenter.

Dans votre fichier principal, initialisez un Counter avec la valeur de départ, puis appelez counter_increment le nombre de fois indiqué. Enfin, utilisez counter_get pour récupérer et afficher la valeur finale.

Affichez le résultat dans ce format :

Final value: {result}

Par exemple, avec une valeur de départ de 5 et 3 incréments, la sortie serait :

Final value: 8

Essayez vous-même

#include <stdio.h>
#include "counter.h"

int main() {
    // Lire l'entrée
    int starting_value;
    int num_increments;
    scanf("%d", &starting_value);
    scanf("%d", &num_increments);
    
    // TODO: Créer un Counter et l'initialiser avec starting_value
    
    // TODO: Appeler counter_increment le nombre de fois spécifié
    
    // TODO: Utiliser counter_get pour récupérer la valeur finale et l'afficher
    // Format d'affichage : "Final value: {result}"
    
    return 0;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur C en ligne