Je sui confronté à un petit problème pourtant relativement commun : j'ai créé pour un programme une structure de liste chainée très primaire et j'aimerai lui rajouter des membres de données et des méthodes grâce à l'héritage afin de lui ajouter certaines fonctionnalitées utiles à certains endroits du programme (tout en gardant la classe servant de base car également utilisée).

Ma classe de liste basique s'apparente à ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
class Liste
{
public:
    // Méthodes...
private:
    // Membres de données
    Liste *next;
};
Où next représente un pointeur vers l'élément suivant de la liste bien entendu.

Le problème, étant que lors de la création de ma classe ListeEtendue, par héritage public de liste, le pointeur nommé précédement "next" reste de type Liste et ne prends pas le type ListeEtendue.

Aussi ma question est : existe il une manière académique / ou éprouvée de traiter le problème ?

Certaines personnes m'avaient conseillé d'avoir recours à des fonctions virtuelles avec du cast, mais je trouve que ca complexifie beaucoup la chose pour un problème tout de même très simple (surtout que je préfererai que l'utilisateur puisse utiliser simplement cette classe).

Personnelement j'ai procédé de la sorte :
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
 
// Squellette de base de la liste : aucun n'objet ne sera instancié de cette dernière
template <class T>
class BaseListe
{
    // Membres et méthodes publiques et privées
    T *next;
}
 
// Ma liste basique
class Liste : public BaseListe<Liste>
{
};
 
// Ma liste étendue
class ListeEtendue : public BaseListe<ListeEtendue>
{
    // Méthodes et membres de données supplémentaires
}
( l'héritage "vide" de Liste à partir de BaseListe s'expliquant par l'impossibilité d'avoir recours à un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
class List; typedef BaseList<List> List;
)

Ca marche, mais je me demandai s'il n'existait pas une meilleure solution (simple!). Merci.