C'est ça un template ???

Résolu
wismerhill__ Messages postés 88 Date d'inscription mercredi 1 juin 2005 Statut Membre Dernière intervention 26 juillet 2007 - 13 juil. 2006 à 11:30
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 - 13 juil. 2006 à 19:53
Bonjour, j'ai un probleme que je pense etre simple mais bon ...

J'ai une classe A dont un attribut est actuelement un std::vector<*B>

Une classe B mere de C et D classique attribut v2

Une classe C fille de B attribut v3
Une classe D fille de B attribut v4

un element de B est toujours un element de C ou D
mon probleme est qu'en fait je dois pouvoir acceder à v3 et v4 dans une fonction de la classe A, et je ne sais pas comment dire à C++ que le std::vector<*X> dois etre *B ou *C

Sachant que je veux evidement pouvoir acceder aussi à v2 mais j'immagine que si je peux acceder aux filles la mere viendra facilement :)
Ce ne serait pas ca un template ???

????Quel est le code que je dois mettre pour dire que mon std::vector<*X>????

Merci

wis : in tartiflette I trust (like the others)

4 réponses

wismerhill__ Messages postés 88 Date d'inscription mercredi 1 juin 2005 Statut Membre Dernière intervention 26 juillet 2007
13 juil. 2006 à 12:19
merci de ta reponse turnerom, mais cela demande encore d'avoir un test pour savoir si je susi dans C ou D,
en même temps je peux comprendre qu'il ne soit pas possible de faire un pointeur, qui apres tout pointeur sur une union de classe (c'est a peu pres ce que je lui demande ...)

néanmoins c'est carrement pas mal....merci :)

wis : in tartiflette I trust (like the others)
3
turnerom Messages postés 492 Date d'inscription samedi 10 juillet 2004 Statut Membre Dernière intervention 12 janvier 2012 1
13 juil. 2006 à 12:07
OUPS, j'ai été un peu vite, voila :


Tu fais une classe B abstraite et tu fais un enum par exemple


enum {CLASSC, CLASSD} TypeClass;


class B

{

public :

    int v2;

    TypeClass type;

    virtual getType const () = 0;

}


class C : public B

{

private :

    int v3;

public :

    C() : type(CLASSC) {}

    virtual ~C() {};

    virtual getType const () {return type;}

}


class D : public B

{

private :

    int v4;

public :

    D() : type(CLASSD) {}

    virtual ~D() {};

    virtual getType const () {return type;}

}


Ensuite dans ta classe A, tu fais un

B* ptr = new C();

if(B->getType() == CLASSC)

    // tu es dans la class C

else

    // tu es dans la class D

TuRn3r
0
wismerhill__ Messages postés 88 Date d'inscription mercredi 1 juin 2005 Statut Membre Dernière intervention 26 juillet 2007
13 juil. 2006 à 12:15
Excusez moi, j'ai trouvé la réponse, enfin une feinte qui consiste à dynamic_cast er mon pointeur.
Mais bon ce serait mieux si effectivement je pouvais mettre un pointeur sur n'importe quelle classe (et donc acceder aux methodes de ces classes)

wis : in tartiflette I trust (like the others)
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
13 juil. 2006 à 19:53
Le dynamic_cast n'est pas forcement necessaire, aide toi du polymorphisme avec les methodes virtuelles
0
Rejoignez-nous