D1m3x
Messages postés402Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention21 juillet 20051 4 nov. 2003 à 19:00
Je dirais même que ça m'a complètement éclairer, merci, vraiment!!! Je comprend enfin à quoi ça sert ^^ lol
bon ben je vais essayer de l'utiliser alors :p
Merci encore :)
gvhecke
Messages postés65Date d'inscriptionvendredi 17 octobre 2003StatutMembreDernière intervention21 mai 2008 3 nov. 2003 à 21:56
Il arrive souvent de vouloir réutiliser un même algorithme pour manipuler des structures différentes. Par exemple, trier un vercteur d'entier (int), un vecteur de réels (double), de nombres à virgule flottante (float), de string de caractère (char* ou char[]).
Il serait bien bête de devoir réimplenter à chaque fois une nouvelle fonction alors que dans l'ensemble, le code reste identique. Il n'y a que le type des variables que l'on manipule qui diffère (une fois int, une autre fois double ou float...)
Afin de permettre ce genre de chose, le language c++, permet en plaçant la ligne template <classe Type> de généraliser l'usage d'une fonction ou d'une class.
Dans l'exemple ci-dessus, j'ai coder la fonction QuickSort dans une classe (généralisée par l'usage de la ligne template <class T>). Le vecteur peut alors être de type T. Pour que cela fonctionne il faut que les opérateur ">" et "<" ait été défini pour les objet de class T. s'il on veut pouvoir trier des vecteur de string par ordre alphabétique, il faut avoir défini les opérateur "<" et ">" pour les string.
définition d'une fonction généralisée:
========================
template <class Type>
type_retour nom_Fonction (Type variable1, Type variable2, ...);
définition d'une classe généralisée:
=======================
template <class Type>
class MaClasse
{
public:
MaClasse(); //constructeur
~MaClasse(); //Destructeur
Type& NomFonction(const Type& var); //expl de fonction membre
...
private: //membre, champs de ma classe
Type membre1; //variable de type Type
Type* pointeurVersMembre2; //pointeur vers une var de type Type
int AutreMembre;
...
};
template <class Type>
MaClasse<Type>::MaClasse() {...} //définition du constructeur
template <class Type>
Type& MaClasse<Type>::NomFonction(const Type& var)
{...} //exemple de fonction membre d'une classe
Déclaration d'une variable MaClasse de type int:
=================================
MaClasse var;
Déclaration d'un meme objet pour le type float:
================================
MaClasse<float> var;
Voilà.
J'espère que ca t'éclairera.
Geofrey
D1m3x
Messages postés402Date d'inscriptionsamedi 28 décembre 2002StatutMembreDernière intervention21 juillet 20051 2 nov. 2003 à 17:48
bon ça fait longtemps que je regarde des codes comme celui-la, et à chaque fois je ne peux pas tout comprendre à cause d'un petite conner*** celle-ci:
template <...>
je ne sais pas à quoi servent les <> :'( serais tu me l'expliquer STP??? au moins j'apprendrai quelque chose de nvo :)
4 nov. 2003 à 19:00
bon ben je vais essayer de l'utiliser alors :p
Merci encore :)
3 nov. 2003 à 21:56
Il serait bien bête de devoir réimplenter à chaque fois une nouvelle fonction alors que dans l'ensemble, le code reste identique. Il n'y a que le type des variables que l'on manipule qui diffère (une fois int, une autre fois double ou float...)
Afin de permettre ce genre de chose, le language c++, permet en plaçant la ligne template <classe Type> de généraliser l'usage d'une fonction ou d'une class.
Dans l'exemple ci-dessus, j'ai coder la fonction QuickSort dans une classe (généralisée par l'usage de la ligne template <class T>). Le vecteur peut alors être de type T. Pour que cela fonctionne il faut que les opérateur ">" et "<" ait été défini pour les objet de class T. s'il on veut pouvoir trier des vecteur de string par ordre alphabétique, il faut avoir défini les opérateur "<" et ">" pour les string.
définition d'une fonction généralisée:
========================
template <class Type>
type_retour nom_Fonction (Type variable1, Type variable2, ...);
définition d'une classe généralisée:
=======================
template <class Type>
class MaClasse
{
public:
MaClasse(); //constructeur
~MaClasse(); //Destructeur
Type& NomFonction(const Type& var); //expl de fonction membre
...
private: //membre, champs de ma classe
Type membre1; //variable de type Type
Type* pointeurVersMembre2; //pointeur vers une var de type Type
int AutreMembre;
...
};
template <class Type>
MaClasse<Type>::MaClasse() {...} //définition du constructeur
template <class Type>
Type& MaClasse<Type>::NomFonction(const Type& var)
{...} //exemple de fonction membre d'une classe
Déclaration d'une variable MaClasse de type int:
=================================
MaClasse var;
Déclaration d'un meme objet pour le type float:
================================
MaClasse<float> var;
Voilà.
J'espère que ca t'éclairera.
Geofrey
2 nov. 2003 à 17:48
template <...>
je ne sais pas à quoi servent les <> :'( serais tu me l'expliquer STP??? au moins j'apprendrai quelque chose de nvo :)
j'espère que tu pourras m'aider....
bye