IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Mettre un vecteur template dans une class


Sujet :

Langage C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Points : 48
    Points
    48
    Par défaut Mettre un vecteur template dans une class
    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

  2. #2
    r0d
    r0d est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 265
    Points : 6 686
    Points
    6 686
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Dimitri_87
    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.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TVecteur<UneClasse> monvecteur;

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Points : 48
    Points
    48
    Par défaut
    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
    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;}
    };
    Ca marchait très bien mais maintenant on me demande de mettre ce vecteur dans la class Armoire.
    Donc j'ai fait ceci :
    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;}
    };
    Mais ça ne marche plus si bien. J'aimerais pouvoir instancier un vecteur comme avant mais en mettant quelque chose comme :
    Armoire<class type>vec(5)
    La class Armoire étant toujour une class "normale".

    Merci
    Bonne soirée

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    je suis pas sur d'aoir tout compris à tes questons,
    mais bon ça pourrait donner un truc comme ça :

    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(){}
    };
    PS : la classe template vecteur existe déjà dans la STL : vector<>

  5. #5
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Février 2004
    Messages
    644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant ERP

    Informations forums :
    Inscription : Février 2004
    Messages : 644
    Points : 785
    Points
    785
    Par défaut
    Utilise std::vector de la manière suivante
    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:
    };
    parce que l'implémentation de ton vecteur est foireuse dès le départ.

    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 ).

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Points : 48
    Points
    48
    Par défaut
    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 :
    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:
    };
    Merci

  7. #7
    Membre habitué Avatar de b Oo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 179
    Points : 185
    Points
    185
    Par défaut
    Bien sûr que tu peux.
    Si tu veux pouvoir choisir ton type de données dans Armoire c'est :
    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:
     
    };
    et dans le main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Armoire<int> am1;
    Armoire<float> am2;
    Si tu veux figer ton type, par exemple int :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    class Armoire
    {
       private:
         TVecteur<int> monvecteur;
       public:
    };
    et dans le main
    Voila.

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Points : 256
    Points
    256
    Par défaut
    c'est quand même à peu prés ce que j'avais donné dans ma 1ère réponse ... non ?

    @+

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 103
    Points : 48
    Points
    48
    Par défaut
    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

Discussions similaires

  1. Spécialisation de fonction template dans une class template
    Par summerstorm dans le forum Langage
    Réponses: 6
    Dernier message: 05/01/2010, 20h15
  2. Réponses: 9
    Dernier message: 05/01/2010, 08h32
  3. iterateur d'un conteneur template dans une classe template
    Par coyotte507 dans le forum Langage
    Réponses: 2
    Dernier message: 03/07/2009, 13h08
  4. Fonction template dans une classe template
    Par mister3957 dans le forum Langage
    Réponses: 9
    Dernier message: 08/07/2008, 12h11
  5. Réponses: 9
    Dernier message: 19/05/2007, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo