TP 5 de Programmation 2e Année Informatique 2003-2004 : Rappels de C

Exercice 1

On veut écrire une bibliothèque de listes chaînées d'entiers en C++. On récupèrera tous les fichiers du répertoire source.

On créera deux classes : Liste et ElementListe. Une Liste contient un pointeur vers son premier élément. Un ElementListe a la forme :

class ElementListe {
      private:
      int valeur;
      ElementListe *next;
      
      ElementListe(int val);
      ~ElementListe();
      int getValeur();
      void setValeur(int v);
      ElementListe * getSuivant();
      void setSuivant(ElementListe *n);
      
      // La déclaration suivante autorise
      // la classe Liste à accéder aux éléments privés
      // de ElementListe
      friend Liste;
};      
    

Question 1

Écrire le constructeur de Liste, La fonction d'ajout d'un entier dans la liste, et le destructeur de Liste.

Question 2

Il est possible en C++ de surcharger les opérateurs, et en particulier <<, de manière à pouvoir afficher directement n'importe quelle valeur. En déclarant dans la classe Liste :
      friend ostream & operator<<(ostream &s, const Liste &l);
    
On dit que l'opérateur <<, quand il prend comme argument une sortie et une liste, a accès à la représentation interne de Liste.

Il ne vous reste plus qu'à implémenter l'opérateur pour qu'il écrive les éléments de Liste&nobr;:

ostream & operator<<(ostream &s, const Liste &l) {
      // Affiche le contenu de la liste ....

      // Retourne le flux de sortie (pour composition cout << a << b...)
      return s;
}
    

Question 3

Écrire la méthode enlever(int val), qui enlève la valeur val à la liste si elle s'y trouve.

Question 4

Reprendre l'exercice en modifiant ElementListe :
class ElementListe {
      private:
      int valeur;
      Liste *suite;
      
      ElementListe(int val);
      ~ElementListe();
      int getValeur();
      void setValeur(int v);
      Liste * getSuite();
      void setSuite(Liste *n);
      
      // La déclaration suivante autorise
      // la classe Liste à accéder aux éléments privés
      // de ElementListe
      friend Liste;
};      
    
Attention : Dans ce dernier cas, un ElementListe seul a pour suite une liste vide, et non un pointeur nul.
Serge ROSMORDUC