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 :

Pointeur sur des fonctions membres d'une classe


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut Pointeur sur des fonctions membres d'une classe
    Bonjour a tous, j'ai une question sur les pointeurs de fonctions :

    Je déclare une fonction de la sorte :
    int (*g)() ;

    Si je fais ca en dehors de toute classe, je déclare mon prototype de fonction au dessus, et ca fonctionne, je peux utiliser ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int f1();
    int (*g)();
     
    // association :
    g = f1 ;
     
    // et ainsi je peux l'appeler dans le code :
    (*g)();
    Mais je désire maintenant mettre tout ca dans une classe et appeler des fonctions d'une classe :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    // .h :
     
    class MaClasse
    {
     
    private :
     
       int f1() ;
     
    };
    donc la declaration de mon pointeur sur fonction devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    int (MaClasse::*g)();
    Donc je peux désormais associer des fonctions membres, et les ecrire ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MaClasse::f1()
    {
       // blabla
    }
    MAIS MA QUESTION EST LA SUIVANTE :
    COMMENT APPELER UNE FONCTION MEMBRE MAINTENANT ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void MaClasse::Appel_Fonction( void )
    {
           (*g)();
    }
    ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void MaClasse::Appel_Fonction( void )
    {
           (Ma_Classe::*g)();
    }
    ne fonctionne pas non plus. L'erreur est :

    '*' : illegal on operands of type 'void (__thiscall MaClasse::*)( void )

    pour le premier cas et :

    syntax error : '<tag>::*'

    pour le second cas.

    Voila, merci pour votre aide, a bientot.

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 751
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 751
    Points : 10 670
    Points
    10 670
    Billets dans le blog
    3
    Par défaut
    Il te manque une instance de classe.
    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
    #include <iostream>
    using namespace std;
     
    class A
    {
    public:
    	void f1() { cout << "f1\n"; }
    	void f2() { cout << "f2\n"; }
    };
     
    int main()
    {
    	void (A::*g)(); 
    	A a;
     
    	g = &A::f1;
    	(a.*g)();
     
    	g = &A::f2;
    	(a.*g)();
    }

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Et pour l'appeler à l'intérieur d'une fonction membre de la même classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void MaClasse::Appel_Fonction( void )
    {
           (this->*g)();
    }

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2002
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 200
    Points : 120
    Points
    120
    Par défaut
    Oh lalala !!! J'ai pourtant cherché un temps fou la dessus !
    Et apres coup, ca parait evident de devoir resituer le contexte.

    Un grand merci a vous deux, et a la prochaine !
    Bye

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/01/2015, 17h36
  2. Map contenant des pointeurs sur des fonctions membres
    Par Bash01 dans le forum Débuter
    Réponses: 1
    Dernier message: 18/05/2010, 15h06
  3. fonction membre d'une classe amie d'une autre classe
    Par olive_le_malin dans le forum C++
    Réponses: 3
    Dernier message: 16/11/2006, 09h39
  4. Réponses: 3
    Dernier message: 29/04/2006, 13h02
  5. Thread avec une fonction membre d'une classe
    Par SteelBox dans le forum Windows
    Réponses: 6
    Dernier message: 01/03/2004, 01h15

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