Bonjour,
J'aimerais savoir comment faire pour placer un vecteur template dans une class "normale" ??
J'ai déja fait une class TVecteur template mais j'aimerais que ce vecteur se trouve dans une class Armoire.
Merci
Bonne journée
Bonjour,
J'aimerais savoir comment faire pour placer un vecteur template dans une class "normale" ??
J'ai déja fait une class TVecteur template mais j'aimerais que ce vecteur se trouve dans une class Armoire.
Merci
Bonne journée
Envoyé par Dimitri_87
Code : Sélectionner tout - Visualiser dans une fenêtre à part TVecteur<UneClasse> monvecteur;
Je me suis aperçu que ma question n'est pas des plus clair.
Au début j'ai fait une class Template dont j'instenciait un objet comme suit:
TVecteur<class type> vecteur(5) qui me créait un vecteur de 5 objets de la class
Ca marchait très bien mais maintenant on me demande de mettre ce vecteur dans la class Armoire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 template<class T>class TVecteur { private: T *data; int nbel; public: TVecteur(int n=10); T& operator[](int i){return *(data+i);} ~TVecteur(void){delete data;} };
Donc j'ai fait ceci :
Mais ça ne marche plus si bien. J'aimerais pouvoir instancier un vecteur comme avant mais en mettant quelque chose comme :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 template<class T> class Armoire { private: T *data; int nbel; public: T Vecteur(int n=10); T& operator[](int i) {return *(data+i);} ~Armoire(void){delete data;} };
Armoire<class type>vec(5)
La class Armoire étant toujour une class "normale".
Merci
Bonne soirée
je suis pas sur d'aoir tout compris à tes questons,
mais bon ça pourrait donner un truc comme ça :
PS : la classe template vecteur existe déjà dans la STL : vector<>
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 template<class T> class TVecteur { private: T *data; int nbel; public: TVecteur(int n=10) { data = new T[nbel=n]; } ~TVecteur(void) { delete data; } T& operator[](int i) { return *(data+i); } }; template<class T> class Armoire { private: TVecteur<T> m_tvect; public: Armoire(int n=10) : m_tvect(n) {} ~Armoire(){} };
Utilise std::vector de la manière suivante
parce que l'implémentation de ton vecteur est foireuse dès le départ.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class MyClass { private: std::vector< un_type_de_donnees > MyVector; public: };
pour la simple et bonne raison que tu utilises un tableau contigue et que tu pourrais avoir des problèmes avec la gestion de ton tableau.
std::vector a été longuement testé et offre tout ce que tu désires d'un véritable vecteur ( list aussi ).
Le problème c'est que je ne sais pas si je peus utiliser Vector, je demanderais a mon prof.
Aussi non, est ce qu'il y a moyen de faire la même chose que vector mais avec la class TVecteur un peu plus haut et écrire :
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class Armoire { private: TVecteur<un type de donnée>monvecteur; public: };
Bien sûr que tu peux.
Si tu veux pouvoir choisir ton type de données dans Armoire c'est :
et dans le main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 template <class Type> class Armoire { private: TVecteur<Type> monvecteur; public: };
Si tu veux figer ton type, par exemple int :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Armoire<int> am1; Armoire<float> am2;
et dans le main
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class Armoire { private: TVecteur<int> monvecteur; public: };
Voila.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Armoire am;
c'est quand même à peu prés ce que j'avais donné dans ma 1ère réponse ... non ?
@+
C'est vrai. Mais je pensais qu'il y avait possibilitée d'utiliser une variable membre template non fixer sans que la class soit template.
Merci
Partager