IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Une question sur les linked list


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Par défaut Une question sur les linked list
    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; 
    };

  2. #2
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Non y'a aucun avantage. (si un overhead ).

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Le seul avantage de ce code est qu'il s'agit d'un code... "pur orienté objet", ce qui, en C++, s'apparente beaucoup plus à un inconvénient

    Certains langages ne te permettraient pas de faire autrement, avec, comme conséquence, le fait que... tout objet destiné à se trouver dans une liste héritera de la même classe de base, et donc, que tu finira par... pouvoir placer des voiture et des éléphants roses (ou non ) dans la même liste

    C++ permet d'utiliser le paradigme dit "de programmation générique", et d'éviter ce danger.

    C'est, entre autres, ce que fait la STL avec sa liste qui ne force pas, a priori, à permettre de faire cohabiter un éléphant (rose ou non) avec une voiture.

    Autant profiter de cette possibilité "chaque fois que possible" car lorsque tu as une classe de base identique alors que ce n'est pas nécessaire, cela complique énormément le développement et rend l'ensemble du projet beaucoup moins flexible
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Par défaut
    Ok. Noté.
    Merci.

Discussions similaires

  1. question sur les linked list
    Par yacin87 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 14/04/2010, 23h55
  2. question sur les linked list
    Par yacin87 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 11/04/2010, 22h04
  3. une question sur les array list
    Par yacin87 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 09/04/2010, 22h56
  4. Encore une question sur les ListBox !!
    Par SebRs dans le forum Windows
    Réponses: 3
    Dernier message: 09/05/2006, 15h29
  5. une question sur les includes comportement bizard
    Par e-m.guillaume dans le forum Langage
    Réponses: 2
    Dernier message: 24/02/2006, 21h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo