Spécialisation des méthodes de la classe liste: liste::liste(liste& source) { maillon *index,*nouveau; debut_liste = NULL; for (index=source.debut_liste; index!=NULL; index=index->suivant) { if ((nouveau = new maillon) == NULL || (nouveau->valeur = new char[strlen(index->valeur)+1]) == NULL ) { cout << "Erreur : espace memoire insuffisant" << endl; exit(1); } strcpy(nouveau->valeur,index->valeur); nouveau->suivant = debut_liste; debut_liste = nouveau; } } booleen liste::ajouter(char* element) { maillon *nouveau; if ((nouveau = new maillon) == NULL || (nouveau->valeur = new char[strlen(element)+1]) == NULL ) { return FAUX; } strcpy(nouveau->valeur,element); nouveau->suivant = debut_liste; debut_liste = nouveau; return VRAI; } liste::~liste() { maillon *index,*suivant_index; index = debut_liste; while(index!=NULL) { suivant_index = index->suivant; delete index->valeur; delete index; index = suivant_index; } } liste liste::operator = (liste source) { // si la liste source est la même que la liste cible, on ne fait rien if (this == &source) { return *this; } // destruction des maillons de l'ancienne liste maillon *index, *suivant_index; index = debut_liste; while(index!=NULL) { suivant_index=index->suivant; delete index->valeur; delete index; index = suivant_index; } // copie de la liste source maillon *nouveau; debut_liste = NULL; for(index=source.debut_liste; index != NULL; index=index->suivant) { if ((nouveau = new maillon) == NULL || (nouveau->valeur = new char[strlen(index->valeur)+1]) == NULL ) { cout << " espace mémoire insuffisant " << endl; exit(1); } strcpy(nouveau->valeur,index->valeur); nouveau->suivant = debut_liste; debut_liste = nouveau; } return *this; } Voici un exemple réalisant les mêmes actions que le premier exemple mais en utilisant des chaînes de caractères : main() { int index; char element[3]; // association d'un flot à une chaîne de caractères ostrstream flot(element,3); // création de deux listes de chaînes de caractères liste liste1,liste2; for (index=0; index<10; index++) { // Mise dans le flot, donc dans la chaîne de caractères, du nombre index flot << index << '\0'; liste1.ajouter(element); // Mise du pointeur d'écriture en début de chaîne flot.seekp(0); } for (index=10; index<20; index++) { flot << index << '\0'; liste2.ajouter(element); flot.seekp(0); } cout << "liste 1 : " << liste1 << endl; cout << "liste 2 : " << liste2 << endl; liste2 = liste1; cout << "liste 2 après modification : " << liste2 << endl; } Résultat de l'exécution : liste1 : ( 0 1 2 3 4 5 6 7 8 9 ) liste2 : ( 10 11 12 13 14 15 16 17 18 19 ) liste2 après modification : ( 0 1 2 3 4 5 6 7 8 9 )