Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1977 connectés 

 


Dernière réponse
Sujet : problème insoluble ... (en tout cas pour moi ;))
janoscoder tout d'abord pour info, le préfixe Cmachin est utilisé assez largement par la MFC, donc gaffe.
Puis, si tu fais cette liste autrement pour que t'entrainer à programmer, jette un oeil aux listes de la STL (#include <list> )
Ca rend moins naïf.
Ensuite, si tu veux vraiment faire ta liste toi même, y'a pas besoin de faire de type dérivé. Si tu veux faire une liste chainée, il faut créer des noeuds qui se chargent de pointer vers des éléments d'un certain type.
 
template <typename T>
Node
{
 T elem;
 Node<T> * next, * prev;
public:
 Node(const T & telem, Node<T> * ptrev, Node<T> * tnext):elem(telem), prev(tprev), next(tnext){}
 T& operator * (){return elem;}
 const T & operator * () const {return elem;}
};
 
template <typename T>
class List
{
 Node<T> * first, * last;
public:
 ...
};
 
enfin j'ai pas envie d'en écrire plus, mais ça ressemble déjà à  une liste chainée.
 
Si tu veux plus d'info, ou si tu veux limiter l'usage de ces listes à des types dérivés d'un certain type T, n'hésite pas à poster.

Votre réponse
Nom d'utilisateur    Pour poster, vous devez être inscrit sur ce forum .... si ce n'est pas le cas, cliquez ici !
Le ton de votre message                        
                       
Votre réponse


[b][i][u][strike][spoiler][fixed][cpp][url][email][img][*]   
 
   [quote]
 

Options

 
Vous avez perdu votre mot de passe ?


Vue Rapide de la discussion
janoscoder tout d'abord pour info, le préfixe Cmachin est utilisé assez largement par la MFC, donc gaffe.
Puis, si tu fais cette liste autrement pour que t'entrainer à programmer, jette un oeil aux listes de la STL (#include <list> )
Ca rend moins naïf.
Ensuite, si tu veux vraiment faire ta liste toi même, y'a pas besoin de faire de type dérivé. Si tu veux faire une liste chainée, il faut créer des noeuds qui se chargent de pointer vers des éléments d'un certain type.
 
template <typename T>
Node
{
 T elem;
 Node<T> * next, * prev;
public:
 Node(const T & telem, Node<T> * ptrev, Node<T> * tnext):elem(telem), prev(tprev), next(tnext){}
 T& operator * (){return elem;}
 const T & operator * () const {return elem;}
};
 
template <typename T>
class List
{
 Node<T> * first, * last;
public:
 ...
};
 
enfin j'ai pas envie d'en écrire plus, mais ça ressemble déjà à  une liste chainée.
 
Si tu veux plus d'info, ou si tu veux limiter l'usage de ces listes à des types dérivés d'un certain type T, n'hésite pas à poster.
freewol Voila ce que je voudrais faire (et qui me semble impossible, m'enfin j'espere bien me tromper) :
déjà la classe CElement, qui contient entre autre un pointeur vers un autre CElement (classique ;))
on a également une classe CList, qui contient plusieurs pointeurs vers des CElement, ainsi que des fonctions qui prennent en param, ou bien retournent, un CElement.
Et ensuite il faudrait qu'on puisse créer une class par ex CTrucList, qui fasse exactement la même chose que CList, mais avec tous les CElement remplacés par des CTruc, classe dérvivée de CElement ...
Alors voila au départ ce problème me semblait tt con avec des templates, mais après plusieurs heures d'essais, je commence à craindre que cela ne soit impossible ...  
Alors j'espere que je suis un gros mauvais et qu'effectivement c'est simple à faire, mais dites moi comment ! ;)
Au fait, si j'ai pas été assez clair (ce qui est à craindre vu les problèmes que j'ai à résoudre ce problème), demandez !

Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)