CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

(C++) Pointeur vers classe et héritage

lag-it
lag-it
Niveau 10
03 mai 2005 à 13:36:29

Encore une petite question :) : j´ai créé une classe d´arbre binaire ( avec des noeuds, renfermant des pointeurs vers les noeuds fils gauche et droite) et je désirerai hériter une nouvelle classe de cette dernière afin de lui ajouter de nouvelles fonctionnalités.
Le problème c´est que mes pointeurs vers les noeuds fils restent du type de la classe dont ils ont hérité, et ne deviennent pas du type de la nouvelle classe.
Comment faire cela proprement ? En évitant de rajouter un pointeur du nouveau type et ne plus se servir de ceux de l´ancien type, ce qui occupe de la mémoire pour rien, tout en conservant l´héritage ( si c´est possible)
( et sans passer par un template, à moins que ce ne soit la dernière solution :) )

lag-it
lag-it
Niveau 10
03 mai 2005 à 13:48:16

Parce que sinon je voulais faire :

template < class T>
class Classe1NomTemporaire
{
public:
    // . ..
private:
    // . ..
    T *filsDroit, *filsGauche;
};

typedef Classe1NomTemporaire<Classe1NomTemporaire> Classe1;

class Class2; / / Je sais pas si c´est nécessaire pour utiliser le template après
class Class2 : public Classe1NomTemporaire<Class2>
{
/ / . ..
}

Enfin bon c´est assez... :snif:

JeanYvesYves
JeanYvesYves
Niveau 10
03 mai 2005 à 13:53:09

hum !

je propose soit Polymorphisme : tu instancie touours la classe mere, donc c´est bon.

soit sinon, tu refais des pointeurs dans la classe fille, ou alors tu fais une méthode qui cast les pointeurs, de mere en fille.

lag-it
lag-it
Niveau 10
03 mai 2005 à 14:00:18

Oui mais la classe mère ici c´est Classe1 ( mon poste du dessus n´est qu´une alternative éventuelle ( mais pas très propre à mon gout :) ) )

Polymorphisme, c´et trop complexe pour mon projet dont l´utilisation des dites classes se veut simple : je veux pas que l´utilisateur ai à passer par des pointeurs de classe mère pour utiliser ses instances d´objet de classe dérivées.

Sinon le cast dans une, c´est une bonne solution ( d´autant plus que mes membre fils sont private ) ...

Mais bon, il n´existe pas THE solution éprouvée à ce problème somme toute assez classique rencontré dans l´héritage de structures de listes chainées, arbres, . ..

lag-it
lag-it
Niveau 10
03 mai 2005 à 14:01:09

? ( la dernière phrase était une question :o)) )

fil_razorback
fil_razorback
Niveau 10
03 mai 2005 à 14:02:57

" je veux pas que l´utilisateur ai à passer par des pointeurs de classe mère pour utiliser ses instances d´objet de classe dérivées"
Je la vois bien arriver dans les stats du forum celle la... :-p

lag-it
lag-it
Niveau 10
03 mai 2005 à 14:06:37

héhé :)

XyTiX
XyTiX
Niveau 8
03 mai 2005 à 14:18:43

Vous pouvez me redonner l´adresse du site ou on peut poster du code? Je vais t´envoyer les fichiers où j´ai ça.

lag-it
lag-it
Niveau 10
03 mai 2005 à 14:25:40

Raaah j´ai plus l´url...
Mais tu peux me l´envoyer par mail :)

LGV
LGV
Niveau 28
03 mai 2005 à 14:53:24

google > wall code paste > il vous en trouve un petit paquet

sinon, on ne sait pas grand chose de l´utilisation que tu comptes faire de ta structure de donnees, mais moi j´aurais tendance a voir du cote template, quitte a foutre des typedefs pour rendre ca transparent du cote utilisateur. Autre solution, une interface pour les noeuds, du polymorphisme via une fabrique abstraite, mais c´est un peu plus lourd.

lag-it
lag-it
Niveau 10
03 mai 2005 à 14:58:16

Finalement j´ai fait comme ca :

template <class T>
class ClasseTemporaire
{
public:
/ / . ..
private:
/ / . ..
T *filsDroit, *filsGauche;
};

class Classe1 : public ClassTemporaire<Classe1>
{
}; / / La je rajoute rien : c´est moche, mais typedef ClasseTemporaire<Classe1> Classe1 est rejeté...

class Classe2 : public ClasseTemporaire<Classe2>
{
/ / Les ajouts...
}

lag-it
lag-it
Niveau 10
03 mai 2005 à 16:47:12

Et encore une question ( decidement aujourd´hui)
Toujours dans ma classe d´arbre ( enfin de noeud en fait) que j´ai déclaré template, j´ai un petit problème de pointeurs :

En effet à un moment dans le code j´ai mis

template < class T>

Pour avoir ma définition générique de classe

Puis en mebre de donné :

T *filsGauche, filsDroit;

Et un peut plus loin, un appel à :

filsGauche->Fonction();

Sauf qu´à la compilation, le compilo me dit que la partie gauche de ->Fonction doit être de type class/struct/union : je pense que cela vient du fait que le compilateur considère que les types de bases par exemples peuvent remplacer T ( auquel cas, int a; a->Fonction() ne signifie rien ) , mais comment y remédier ?

lag-it
lag-it
Niveau 10
03 mai 2005 à 18:16:17

Je me permet un petit :up:

LGV
LGV
Niveau 28
03 mai 2005 à 19:08:40

le compilo ne fait aucun a-priori sur les templates : ils ne sont compiles a la volee que lorsqu´on les utilise ( le template en lui meme n´existe plus dans la version compilee, par contre les utilisations de templates ont genere des classes correspondantes)

Il faudrait paster un peu plus de code pour qu´on voit comment tu declares tout, et comment tu t´en sers.

lag-it
lag-it
Niveau 10
03 mai 2005 à 20:17:39

Mh non c´éatit une erreur de ma part, mais c´est réolu :)

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment