Bonjour,

Je découvre les "linked list". La plupart des implémentations
utilisent des templates, en particulier les list de la stl.

Mais j'ai vu aussi un modele de "linked list" qui utilise
l'héritage. Ce qui suit en est un exemple:

Et la je ne vois pas pourquoi quelqu'un utiliserait une chose
pareille. Chaque classe dérivée doit implémenter les méthodes
virtuelles et si on veut ajouter des methodes virtuelles c'est
ingérable.
Est ce que quelqu'un voit un avantage pour cette implementation.
Merci.


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
class ListItem 
{
   friend class List;
   friend class ListIterator;
 
   public:
   ListItem() {inserted=0; next=prev=NULL;
               plist=NULL;};
 
   virtual int CompareByInsertKey 
      ( ListItem* item_in_list ) = 0;
 
   virtual ListItem* Clone() = 0;
 
   void Delete();
 
   private:
   ListItem* next;     
   ListItem* prev;    
   int       inserted; 
   List*     plist;    
}; 
 
 
class List
{ 
   friend class ListIterator;
   friend class ListItem;
 
   public:
   List() {head=tail=NULL; generation=0;};
 
   void Insert( ListItem*  new_item );
 
   ....
 
   private:
   ListItem*     head; 
   ListItem*     tail;      
};
 
 
class Person : public ListItem
{
   public:
   Person( char *s, unsigned long id ) {strcpy(name,s); ssn=id;};
   virtual int CompareByInsertKey
      ( ListItem* item_in_list );
   virtual void print();
   virtual ListItem* Clone();
 
   char name[50]; 
 
   private:
   unsigned long ssn; 
};