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

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

Marsh Posté le 07-07-2002 à 00:35:17    

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

Reply

Marsh Posté le 07-07-2002 à 00:35:17   

Reply

Marsh Posté le 07-07-2002 à 00:41:42    

Il faut que fonction_test soit statique.

Reply

Marsh Posté le 07-07-2002 à 00:57:57    

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

Reply

Marsh Posté le 07-07-2002 à 11:36:01    

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:

Reply

Marsh Posté le 07-07-2002 à 12:51:12    

*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 :-)

Reply

Marsh Posté le 07-07-2002 à 12:52:05    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed