Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
693 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Pointeur de fonction sur membre d'une classe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Pointeur de fonction sur membre d'une classe

n°172396
*syl*
--> []
Posté le 07-07-2002 à 00:35:17  profilanswer
 

Hello tt l'monde !
 
J'ai un p'tit pb qui est à mon avis insolvable mais bon..je pose la question qd même..
 
Commençons déjà par du code :

Code :
  1. #include <condefs.h>
  2. #include <conio.h>
  3. #include <iostream>
  4. #pragma hdrstop
  5. #pragma argsused
  6. using namespace std ;
  7. typedef void (*ptrFct) (int i) ;
  8. class A{
  9.     private :
  10.         ptrFct f ;
  11.     public :
  12.         A(ptrFct p){
  13.             f = p ;
  14.             f(20) ;
  15.         }
  16. } ;
  17. void fonction_test(int i){
  18.     cout << i << endl ;
  19.     getch() ;
  20. }
  21. int main(int argc, char **argv)
  22. {
  23.     A var(fonction_test) ;
  24.     return 0 ;
  25. }


Là, pas de pb, fonction_test() n'étant pas dans une classe, le p'tit programme fonctionne très bien et 20 est affiché à l'écran..
 
Mais voilà, moi je veux mettre fonction_test() dans une classe et c'est là que ça coince à cause de l'argument caché (le fameux this) passé à chaque fonction membre..
 
Voilà le même prog avec fonction_test dans une classe :
 

Code :
  1. #include <condefs.h>
  2. #include <conio.h>
  3. #include <iostream>
  4. #pragma hdrstop
  5. #pragma argsused
  6. using namespace std ;
  7. typedef void (*ptrFct) (int i) ;
  8. class A{
  9.     private :
  10.         ptrFct f ;
  11.     public :
  12.         A(ptrFct p){
  13.             f = p ;
  14.             f(20) ;
  15.         }
  16. } ;
  17. class B{
  18.     public :
  19.         void fonction_test(int i){
  20.             cout << i << endl ;
  21.             getch() ;
  22.         }
  23. } ;
  24. int main(int argc, char **argv)
  25. {
  26.     B f ;
  27.     A var(f->fonction_test) ;
  28.     return 0 ;
  29. }


 
Là ça coince bien sûr à la déclaration de la variable var..
Je précise que fonction_test peut se trouver dans n'importe quelle classe donc la classe A ne connait pas la classe où se trouve fonction_test..:)
 
J'espère avoir été clair :)
Alors si y'a une solution, j'suis preneur :)
 
Merci :)

mood
Publicité
Posté le 07-07-2002 à 00:35:17  profilanswer
 

n°172398
verdoux
And I'm still waiting
Posté le 07-07-2002 à 00:41:42  profilanswer
 

Il faut que fonction_test soit statique.

n°172401
Profil sup​primé
Posté le 07-07-2002 à 00:57:57  answer
 

g pas de compilo installé donc je peux pas tester mais a mon avis c comme ca qu'il faut faire :  
 
soit ta fonction est statique donc elle a pas besoin de this
a ce moment la tu ecris le code suivant :    
 A var(B::fonction_test);
 
si elle est pas statique :  
 

Code :
  1. #include <condefs.h>
  2. #include <conio.h>
  3. #include <iostream>
  4. #pragma hdrstop
  5. #pragma argsused
  6. using namespace std ;
  7. typedef void B::(*ptrFct) (int i) ;
  8. class A{
  9.    private :
  10.        ptrFct f ;
  11.    public :
  12.        A(B * b, ptrFct p){
  13.            f = p ;
  14.            b->f(20) ;
  15.        }
  16. } ;
  17. class B{
  18.    public :
  19.        void fonction_test(int i){
  20.            cout << i << endl ;
  21.            getch() ;
  22.        }
  23. } ;
  24. int main(int argc, char **argv)
  25. {
  26.    B f ;
  27.    A var(&f,B::>fonction_test) ;
  28.    return 0 ;
  29. }

 
 
 
mais en C++, c'est pas beau les pointeurs de fonction .
il y a un truc beaucoup plus joli : les méthodes virtuelles pures
si tu es interessé dis le je posterai le code

n°172426
*syl*
--&gt; []
Posté le 07-07-2002 à 11:36:01  profilanswer
 

J'vous remercie tous les deux, j'suis vraiment con de pas avoir penser à faire une classe abstraite.. Bon, j'en ai fait qu'une dans ma vie, ça doit être pour ça que ça m'a pas fait tilt ;)
 
>oualb : pour le code, j'te remercie mais ça ira :)
 
 :hello:

n°172450
fabsk
Posté le 07-07-2002 à 12:51:12  profilanswer
 

*Syl* a écrit a écrit :

Hello tt l'monde !
J'ai un p'tit pb qui est à mon avis insolvable mais bon..je pose la question qd même..




 
Insoluble, peut-etre... Insolvable: qui est hors d'etat de payer ses dettes :-)

n°172452
*syl*
--&gt; []
Posté le 07-07-2002 à 12:52:05  profilanswer
 

fabsk a écrit a écrit :

 
 
Insoluble, peut-etre... Insolvable: qui est hors d'etat de payer ses dettes :-)




Wé, j'avais hésite mais j'avais pas toute ma tête à 00:35:17 ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Pointeur de fonction sur membre d'une classe

 

Sujets relatifs
[VB] comment kon fè pour créer des classe de form ?!une fonction vbscript ne peut elle pas retourner un objet recordset??
[java] récupérer le path du fichier .class associé à une classe[C++] Problème de pointeur this, je capte plus rien :??:
[PHP] savoir si une fonction existe[C++] sous unix, O_TEXT (fonction open())
[C] Existe t'il une fonction équivalente à explode ?Problème de retour chariot dans la fonction mail
[javascript] envoyer formulaire en fonction d'un bouton radio.javascript et la super fonction eval() -> je suis trop nul, mais c bon
Plus de sujets relatifs à : [C++] Pointeur de fonction sur membre d'une classe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR