Menu
Coddy logo textTech

Imbrication de struct

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

Dans les langages orientés objet comme C++ ou Java, l’héritage permet à une classe d’acquérir des propriétés d’une classe parente. C ne possède pas d’héritage intégré, mais nous pouvons le simuler à l’aide d’une technique appelée composition : placer une struct à l’intérieur d’une autre.

L’idée est simple : si un Child a besoin de toutes les propriétés d’un Parent, nous intégrons la structure Parent en tant que membre de Child.

typedef struct {
    int id;
    char name[50];
} Parent;

typedef struct {
    Parent parent;  // Structure embarquée
    int grade;
} Child;

Ici, Child contient tout ce que Parent possède, ainsi que son propre champ grade. Il s’agit de la composition : l’enfant « possède un » parent plutôt que d’« être un » parent, mais l’effet est similaire à l’héritage.

Pour accéder aux membres du parent via une instance enfant, vous utilisez deux fois l’opérateur point :

Child c;
c.parent.id = 101;
c.parent.name[0] = 'A';
c.grade = 5;

Ce modèle constitue la base de la construction de hiérarchies de types en C. En intégrant une structure de base comme premier membre, nous ouvrons la voie à de puissantes techniques que nous explorerons dans les prochaines leçons.

challenge icon

Défi

Facile

Construisons un système simple de gestion des employés qui démontre l’intégration de structures : le fondement de l’héritage en C.

Vous allez créer une hiérarchie dans laquelle un Employee contient un Person. Cela reflète le fonctionnement de l’héritage : un employé « est un » individu auquel s’ajoutent des informations liées à son poste. En intégrant la structure Person dans Employee, vous obtenez toutes les propriétés de la personne, ainsi que les champs propres à l’employé.

Vous allez organiser votre code dans trois fichiers :

  • types.h : définissez les deux structures ici avec des gardes d’inclusion. Commencez par créer une structure Person avec deux champs : name (un tableau de caractères de 50 caractères) et age (un entier). Définissez ensuite une structure Employee qui intègre Person comme premier membre et ajoute un champ employee_id (un entier).
  • types.c : implémentez une fonction appelée print_employee qui reçoit un pointeur vers un Employee et affiche ses informations. Accédez aux données de la personne intégrée en utilisant la syntaxe en chaîne avec le point et la flèche que vous avez apprise.
  • main.c : créez une variable Employee, renseignez tous ses champs (y compris le nom et l’âge de la personne intégrée), puis utilisez votre fonction d’affichage pour afficher les informations.

Vous recevrez trois entrées : le nom de l’employé (une chaîne de caractères), son âge (un entier) et son identifiant d’employé (un entier).

Votre fonction print_employee doit afficher les informations de l’employé au format suivant :

Employee: Alice
Age: 28
ID: 1001

Alice est le nom, 28 est l’âge et 1001 est l’identifiant d’employé fourni dans vos entrées.

N’oubliez pas d’accéder aux membres de la structure intégrée par l’intermédiaire du membre parent : par exemple, pour atteindre le nom, vous devez d’abord passer par le membre person.

Essayez vous-même

#include <stdio.h>
#include <string.h>
#include "types.h"

int main() {
    // Lire l'entrée
    char name[50];
    int age;
    int employee_id;
    
    fgets(name, 50, stdin);
    name[strcspn(name, "\n")] = '\0';  // Supprimer le saut de ligne
    scanf("%d", &age);
    scanf("%d", &employee_id);
    
    // TODO: Créer une variable Employee
    
    // TODO: Renseigner le nom et l'âge de la personne embarquée
    // Hint: Utilisez strcpy pour le nom, accédez avec employee.person.name
    
    // TODO: Définir l'employee_id
    
    // TODO: Appelez print_employee avec un pointeur vers votre employee
    
    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