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

C++ Discussion :

Problème Classe Template


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut Problème Classe Template
    Bonjour à tous.

    Je suis nouveau dans l'utilisation des classes templates. Afin de m'exercer, j'ai écrit le code suivant :
    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
    template <typename T, int n, int m> class C{
    public : int N,M;
    C(void)
    	{
    	this->N = n;
    	this->M = m;
    	}
    void set(int a, int b)
    	{
    	this->N = a;
    	this->M = b;
    	}
    };
    template<typename T, int n, int m> void f1(C<T,n,m> x){
    cout<<"f1 : "<<n<<"\t"<<m<<"\n";
    }
    template<typename T, int n, int m> void f2(C<T,n,m> x){
    cout<<"f2 : "<<x.N<<"\t"<<x.M<<"\n";
    } 
    int main (void){ 
    C<int, 0,1> A;
    A.set(1,0);
    f1(A);
    f2(A);
    return 0;
    }
    En sortie on obtient :
    Je ne comprends pas pourquoi le résultat de la fonction f1 est différent de celui de f2. Avez-vous une idée ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Tu construis un C<int, 0,1> A; qui va donc te donner à partir de la définition de la classe C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    template <typename T, int n, int m> class C { ... };
    la correspondance :
    T = int ;
    n = 0 ;
    m = 1.
    et initialiser par le constructeur tes membres int N,M; comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	this->N = n; // = 0
    	this->M = m; // = 1
    Puis tu utilises la méthode set A.set(1,0); qui va modifier tes membres M et N comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void set(int a, int b)
    	{
    	this->N = a; // = 1
    	this->M = b; // = 0
    	}
    Mais en aucun cas les paramètres template n et m qui eux ont été fixés par la ligne C<int, 0,1> A; à la compilation et ne pourront jamais changer.

    Ainsi, lorsque tu exécutes ta fonction f1, tu rentres un C<int, 0, 1>, le set n'ayant pas changé le type.

    À noter que l'on préfèrera mettre des majuscules aux paramètres template et des minuscules aux membres, l'inverse de ce que tu as fait en fait.
    Et n'oublie pas d'indenter proprement ton code.

Discussions similaires

  1. Problème class template
    Par -_-val-_- dans le forum Débuter
    Réponses: 2
    Dernier message: 11/06/2010, 15h04
  2. Appel de fonction problème class/template
    Par Niko_de_bordo dans le forum Langage
    Réponses: 3
    Dernier message: 15/04/2010, 00h48
  3. [Template] Problème Classe Template
    Par gimpycpu dans le forum Langage
    Réponses: 7
    Dernier message: 23/05/2007, 05h10
  4. problème classes templates...
    Par youp_db dans le forum C++
    Réponses: 3
    Dernier message: 02/11/2005, 13h04
  5. [DLL/classe template] problème de link
    Par Bob.Killer dans le forum C++
    Réponses: 7
    Dernier message: 31/08/2005, 18h56

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