Revenons à la liste chaînée qui nous a servi dexemple précédemment. Quels constructeurs et destructeurs lui donner ?
Il est assez facile de voir quune telle classe ne doit pas avoir de constructeur par défaut. En effet, le noeud ne « vit » que pour conserver linformation element
; il na aucun sens par lui-même. Par exemple créer un tableau de noeuds est un non-sens, puisquon définit cette classe pour servir dans une liste chaînée.
Un constructeur simple ayant pour argument un element
permettra de définir une racine de liste (noeud seul dans une liste). Un autre constructeur, acceptant aussi un element
, plus un pointeur sur un noeud, permettra de créer un nouveau noeud en linsérant derrière lautre.
Il est facile de faire un seul constructeur de ces deux, en utilisant les arguments par défaut. On obtient alors la définition de classe suivante :
class noeud { noeud *suivt; // le suivant dans la liste element elm; // information contenue public : noeud(element, noeud* = 0); // constructeur noeud(noeud& n) { elm = n.elm; } // constructeur de copie noeud *suivant(void) { return suivt; } element &contenu(void) { return elm; } noeud* supprime_svt(void); noeud* insere(element); };inline noeud::noeud(element e, noeud *precedent)// crée le noeud et linsère derrière precedent // si non nul; sinon crée une racine{ elm = e; if (precedent) { suivt = precedent->suivt; precedent->suivt = this; } else suivt = 0;}noeud* noeud::supprime_svt(void)// supprime le noeud suivant et renvoie un pointeur// sur le nouveau suivant{ if (!suivt) return 0; // pas de suivant noeud *s = suivt; suivt = suivt->suivt; delete s; return suivt;}inline noeud* noeud::insere(element e)// insère un nouvel élément de valeur e derrière this.// renvoie 0 si plus de mémoire, sinon suivt.{ noeud *nouveau = new noeud(e, this); return nouveau;}
Nous avons défini aussi un constructeur de copie qui ne recopie que la partie element
de la classe ; en effet, recopier le pointeur serait ici une faute, puisquon sèmerait le désordre dans la liste chaînée.
On notera à quel point notre constructeur à deux paramètres simplifie la fonction dinsertion. Ces deux méthodes ont dailleurs été déclarées en ligne.
Exercice 6.2 | Écrire une fonction qui crée une liste chaînée complète à partir dun tableau déléments |
Voir solution |
Précédent | Sommaire | Suivant |