1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| #include <iostream.h>
#include <conio.h>
#include <string.h>
class noeud{
public:
noeud (): suivant (NULL), precedent (NULL) {}
virtual ~noeud ();
bool dernier () {return (suivant ? false : true);}
bool premier () {return !dernier ();}
bool unique () {return ((precedent && suivant) ? false : true);}
void ajouter (noeud *noeud);
void supprimer ();
protected:
noeud *suivant;
noeud *precedent;
};
noeud::~noeud (){
if (!dernier ()){
delete suivant;
suivant = 0;}
supprimer ();
}
void noeud::supprimer (){
if (precedent)
precedent->suivant = suivant;
if (suivant)
suivant->precedent = precedent;
precedent = NULL;
suivant = NULL;
}
void noeud::ajouter (noeud *noeud){
if (noeud->unique ()){
if (dernier ()){
suivant = noeud;
noeud->precedent = this;
noeud->suivant = NULL;}
else{
suivant->ajouter (noeud);}
}
}
class membre : public noeud{
public:
membre () {}
membre (string name): _name (name) {}
void affichermembre (){
afficher ();
if (!dernier ())
dynamic_cast<membre *>(suivant)->affichermembre ();}
protected:
string _name;
private:
virtual void afficher () {}
};
class nom : public membre{
public:
nom (string name): membre (name) { }
private:
virtual void afficher () { cout << " " << _name << endl; }
};
int main (){
cout << " Voici une liste de membre selon un liste chainee :" << endl << endl;
membre *listemembre = new membre ();
nom *Barack = new nom ("Barack Obama");
nom *George = new nom ("George W. Bush");
listemembre->ajouter (Barack);
listemembre->ajouter (George);
listemembre->supprimer (Barack);
listemembre->affichermembre ();
getch();
return 0;
} |
Partager