Examens corriges

Travaux Dirigés de Programmation C++ : Polymorphisme et Forme Canonique

Introduction aux travaux dirigés de programmation C++

Ce document pédagogique correspond à la troisième feuille de travaux dirigés de programmation en langage C++. Destiné aux étudiants en deuxième année d'informatique, il est rédigé par Julien Allali et rattaché à l'enseirb. L'objectif principal de cette séance est d'approfondir des notions avancées de la programmation orientée objet, notamment le polymorphisme, l'héritage simple et multiple, ainsi que la gestion rigoureuse de la mémoire à travers la forme canonique et les pointeurs intelligents.

Étude du polymorphisme et de la liaison dynamique

La première partie du document s'articule autour du polymorphisme choisi en C++. À partir d'un fichier source proposé, l'exercice invite à analyser le comportement du code lors de l'introduction progressive du mot-clé virtual sur des méthodes membres de classes de base et dérivées. Les étudiants sont amenés à observer les différences entre allocation automatique et allocation dynamique, tout en examinant le rôle des références et des pointeurs dans la résolution des appels de méthodes.

Un accent particulier est mis sur la gestion des destructeurs. La feuille énonce une règle de programmation fondamentale : il est indispensable de rendre virtuel le destructeur des classes potentiellement dérivables afin d'éviter les fuites de mémoire et d'assurer l'appel correct des destructeurs lors de la suppression par un pointeur de la classe de base.

Forme canonique de Coplien et gestion mémoire

Pour garantir une manipulation sûre des objets gérant des allocations dynamiques, le document introduit la notion de forme minimale canonique de Coplien. Cette approche impose de définir explicitement un constructeur, un destructeur, un constructeur par recopie et un opérateur d'affectation. Les concepts de gestion des chaînes de caractères servent d'illustration concrète pour appliquer ces règles d'architecture logicielle.

Héritage et partage de données

La seconde moitié du document aborde l'héritage à travers l'implémentation de classes représentant des personnes, des étudiants et des enseignants au sein de l'espace de noms enseirb. Un exercice spécifique traite de l'héritage multiple en étudiant le cas d'un élève vacataire qui hérite à la fois d'un enseignant et d'un élève, mettant ainsi en lumière les problématiques inhérentes à ce type de conception.

Enfin, la dernière partie traite du partage de données. Afin d'éviter la duplication inutile de zones mémoire lors de la concaténation de chaînes, le document propose d'utiliser un mécanisme de pointeur intelligent s'appuyant sur un compteur de références, préparant ainsi le terrain pour l'utilisation de structures de la bibliothèque standard comme std::vector.

Informations pratiques sur le document

  • Matière : Programmation C++
  • Niveau : Informatique 2ème année
  • Auteur : Julien Allali
  • Institution : enseirb
  • Type de document : Feuille de travaux dirigés

Questions fréquentes

Quel est le rôle du mot-clé virtual abordé dans le premier exercice ?

Le mot-clé virtual permet d'activer le polymorphisme d'exécution en autorisant la liaison dynamique, ce qui garantit que la méthode appelée est celle de l'objet réellement instancié et non celle du type statique du pointeur ou de la référence.

Pourquoi est-il conseillé de rendre les destructeurs virtuels dans les classes dérivables ?

Rendre un destructeur virtuel garantit que, lorsqu'un objet dérivé est détruit via un pointeur ou une référence sur sa classe de base, le destructeur de la classe dérivée est bien exécuté, évitant ainsi des fuites de ressources.

Quel mécanisme est utilisé pour optimiser le partage de mémoire des chaînes de caractères ?

Le document propose d'utiliser un pointeur intelligent associé à un compteur de références, ainsi que la classe std::vector pour gérer des séquences de données partagées sans duplication superflue.





Télécharger Travaux Dirigés de Programmation C++ : Polymorphisme et Forme Canonique pdf