Template

Résolu
cs_fahim
Messages postés
23
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
5 juin 2006
- 28 mars 2006 à 10:08
cs_fahim
Messages postés
23
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
5 juin 2006
- 29 mars 2006 à 12:27
J'ai une classe mère qui définit une variable template. Comment faire pour que les qui en héritent (classes filles) s'en passent de cette variable.

10 réponses

luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
6
28 mars 2006 à 21:12
template<class T
>
class CMD5
:public CHasher
<int>



Mais enleve ce template devant la classe CMD5, c'est tout ! :)

Pk veux tu mettre template devant CMD5, elle n'a aucun rapport avec l'autre classe dont elle hérite.
3
cs_satellite34
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
28 mars 2006 à 13:57
on comprend spas trop ta question la, relis toi et tu vas voir que c'est un peu incomlpréhensible;

si tu veux passer une variable d'une classe mere a ses filles

class mere
{
mere();
~mere();

public:
int var;
}

class fille : public mere // fille hérite des membres publics de mere
{
fille();
~fille();
}


dans l'implémentation de fille,

int m_var = this->var;

ou alors, si tu veux pas faire hériter fille de mere,

tu passe mere en parametre du ctor de fille, ou alors d'une fonction de fille;

je ne sais pas si c'est exactement ce que tu veux faire vu la question un peu floue;

@+;
satellite34

http://www.rootscommunity.com/</FON< body>
0
cs_fahim
Messages postés
23
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
5 juin 2006

28 mars 2006 à 16:53
J'ai une classe mère template. J'ai besoin que les classes filles ne soient pas template parce que je n'ai besoin que de ses attributs et ses méthodes.
0
cs_fahim
Messages postés
23
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
5 juin 2006

28 mars 2006 à 16:54
J'ai une classe mère template. J'ai besoin que les classes filles ne soient pas template parce que je n'ai besoin que de ses attributs et ses méthodes.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_fahim
Messages postés
23
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
5 juin 2006

28 mars 2006 à 16:54
J'ai une classe mère template. J'ai besoin que les classes filles ne soient pas template parce que je n'ai besoin que de ses attributs et ses méthodes. Comment
0
cs_fahim
Messages postés
23
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
5 juin 2006

28 mars 2006 à 16:54
J'ai une classe mère template. J'ai besoin que les classes filles ne soient pas template parce que je n'ai besoin que de ses attributs et ses méthodes. Comment faire.
0
luhtor
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
6
28 mars 2006 à 17:19
Je comprend pas, post ton code directemnt, ca expliquera mieux.
0
cs_fahim
Messages postés
23
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
5 juin 2006

28 mars 2006 à 18:21
Voici le code. J'ai essayé d'exploiter des fonctions définies en par la POO et en utilisant des template.
Tout d'abord j'ai défini une classe mère CHasher dont dérivent les différentes classe de hachage


template<class T
>


class CHasher


{


public:


T obj
;


hash_state m_md
;



unsigned
char
* m_szHashed
;



unsigned
char
* m_szPlainText
;



int m_Inlen
, m_Outlen
;


public:


CHasher
(void);



~CHasher
(void);



virtual
long set
(const
unsigned
char
*
);



virtual
long get
(const
unsigned
char
*
);



virtual
unsigned
char
*
operator<<(const
unsigned
char
*
);



virtual
unsigned
char
*
operator>>(const
unsigned
char
*
);


};

Puis j'ai défini une classe fille CMD5 qui hérite de la classe précédente. Vous pouvez bien remarquer que je n'ai plus besoin d'utiliser des template. Alors j'ai défini la classe dérivée comme suit de telle façon que j'ai essayé d'initialiser le template avec le type int.


template<class T
>


class CMD5
:public CHasher


{


public:


CMD5
(void);



~CMD5
(void);



long set
(unsigned
char
*
);



long get
(unsigned
char
*
);



unsigned
char
*
operator<<(const
unsigned
char
*
);



unsigned
char
*
operator>>(const
unsigned
char
*
);


};

En essayant de créer un objet du type CHasher de la façon j'ai toujours des erreurs.


CHasher
<CMD5
>
hash
;



Je veux savoir résoudre ce problème tout d'abord, mais je veux surtout savoir comment créer des classes non template à partir des classes template.

Et merci pour votre aide.
0
cs_fahim
Messages postés
23
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
5 juin 2006

29 mars 2006 à 09:55
Merci beaucoup luthor.Votre suggestion fonctionne à merveille. Je l'ai essayé et rien à dire là-dessus.
0
cs_fahim
Messages postés
23
Date d'inscription
samedi 8 mai 2004
Statut
Membre
Dernière intervention
5 juin 2006

29 mars 2006 à 12:27
Bonjour,
A la compilation de mon programme j'ai l'erreur suivante:

essai error LNK2019: symbole externe non résolu "public: __thiscall CHasher::CHasher(void)" ([mailto:??0?$CHasher@H@@QAE@XZ ??0?$CHasher@H@@QAE@XZ]) référencé dans la fonction "public: __thiscall CMD5::CMD5(void)" ([mailto:??0CMD5@@QAE@XZ ??0CMD5@@QAE@XZ])

sachant que ça s'affiche dés losque je crée une instance de la classe CMD qui hérite de la classe CHasher

class CMD5
:public CHasher

Est-ce-que quelqu'un peut m'aider.
Je compte surtout sur votre aide luthor.
0