begin process at 2012 05 27 17:49:44
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > POINTEURS SUR FONCTIONS

POINTEURS SUR FONCTIONS


 Information sur la source

Note :
Aucune note
Catégorie :Tutoriaux Niveau :Débutant Date de création :21/10/2003 Date de mise à jour :21/10/2003 22:50:01 Vu :3 580

Auteur : TeLeTUbIz

Ecrire un message privé
Commentaire sur cette source (18)
Ajouter un commentaire et/ou une note

 Description

Ceci est un code (totalement brute et inutile) qui montre comment pointer des fonctions. Ca permet entre autre chose de passer des fonctions en paramètre.
J'ai trouvé cette source (et non, malheureusement, elle n'est pas de moi) sur le site d'un IUT.
L'URL: http://www.iut-bethune.univ-artois.fr/~caron/cours cpp/courscpp.html
Vous trouverez dessus de nombreux cours C++ avec de tres petits exemples mais clairs...

Source

  • #include <iostream.h>
  • int f1(char a) { cout << "f1:" << a << endl ; return 1 ; }
  • int f2(char a) { cout << "f2:" << a << endl ; return 2 ; }
  • int f3(char a) { cout << "f3:" << a << endl ; return 3 ; }
  • void fonction(int (*fct)(char), char a)
  • {
  • fct(a);
  • }
  • int (*ptr_f) (char) ;
  • int main(void) {
  • ptr_f = f1 ;
  • int i ;
  • i=(*ptr_f) ('b') ; // affiche f1:b
  • cout << i << endl ; // affiche 1
  • ptr_f = f2; // pointe f2
  • fonction(ptr_f, 'c'); // le premier parametre est un pointeur (passage de fonction en parametre)
  • return 0 ;
  • }
#include <iostream.h>

int f1(char a) { cout << "f1:" << a << endl ; return 1 ;  }
int f2(char a) { cout << "f2:" << a << endl ; return 2 ; }
int f3(char a) { cout << "f3:" << a << endl ; return 3 ; }


void fonction(int (*fct)(char), char a)
{
  fct(a);
}

int (*ptr_f) (char) ;

int main(void) {
  ptr_f = f1 ;
  int i ;

  i=(*ptr_f) ('b') ; // affiche f1:b
  cout << i << endl ;   // affiche 1
  
  ptr_f = f2;  // pointe f2
  fonction(ptr_f, 'c'); // le premier parametre est un pointeur (passage de fonction en parametre)

  return 0 ;
}

 Conclusion

J'ai rajouté à la demande un exemple de passage de fonction en paramètre.
J'espère ne pas avoir fait trop compliqué.(je ne pense pas)

Voilà, aller, je vais m'en servir...


 Sources du même auteur

[STL] CONNAITRE LA TAILLE D'UN FICHIER ET COPIER DANS UN STR...
Source avec Zip TRI PAR TAS GÉNÉRIQUE. RAPIDE ET EFFICACE.
TOURS DE HANOÏ: INTRODUCTION AUX ALGOS RÉCURSIFS.
Source avec Zip 1 000 000 DE NOMBRES PREMIERS EN 0.062 SECONDES ?
Source avec Zip Source avec une capture CRIBLE D'ERATOSTENE ET GÉNÉRATION DE PAGES WEB.

 Sources de la même categorie

LISTER FICHIERS ET RÉPERTOIRES (MULTIPLATEFORME) par christophedlr
UTILISATION DES TYPELIST EN C++ par wyden
Source avec Zip Source avec une capture QCSSCOMPRESSOR par alphaone
AFFICHAGE D'UN TRIANGLE ISOCELE par nabche
Source avec Zip GESTION D'UNE BIBLOTHEQUE par leclerro19

Commentaires et avis

Commentaire de JCDjcd le 21/10/2003 19:27:32

Il est vrai que les pointeurs sur fonction sont tres utiles !
Il serait bien aussi de faire pour l'exemple un fonction 'executer' qui recoit en parametre la fonction a appeller. Car on stock souvent des pointeurs sur fonction dans des structures et ont en passe aussi souvent a des fonctions, pour quelle soit le plus parametrable possible

Commentaire de TeLeTUbIz le 21/10/2003 22:51:23

OK JCDjcd !
Voila la correction.

Bonne idée de mettre cet exemple, merci à toi !

Commentaire de JCDjcd le 22/10/2003 13:36:17

Voila c'est bien. On c'est maintenant tout faire sur les pointeurs sur fonctions, surtout comment les prototypees.

Commentaire de Horfee le 12/06/2004 00:26:24

Comment fait on pour faire un tableau de ptr sur fonction?et comment s'en servir?

Commentaire de TeLeTUbIz le 12/06/2004 11:38:50

Petit exemple d'utilisation avec des tableaux.

int F1 (char a)
{
cout &lt;&lt; "1" &lt;&lt; a &lt;&lt; endl;
return 1;
}

int F2 (char a)
{
cout &lt;&lt; "2" &lt;&lt; a &lt;&lt; endl;
return 2;
}

int main()
{
int (*f[2]) (char);
f[0] = F1;
f[1]= F2;
cout &lt;&lt; f[0] ('c') &lt;&lt; endl;
cout &lt;&lt; f[1] ('d') &lt;&lt; endl;

return 0;
}


On peut aussi utiliser le type __cdecl qui signifie pointeur sur fonction.


Commentaire de Horfee le 12/06/2004 20:33:28

ok meric bcp!!!

Commentaire de TeLeTUbIz le 13/06/2004 10:52:03

Meric aussi ;-)
J'avais jamais pensé à voir son fonctionnement avec les tableaux.

Commentaire de LordBob le 07/07/2004 11:18:09

a quoi peut servir les pointeurs sur fonction?

Commentaire de JCDjcd le 07/07/2004 12:39:06

Ben ca peut servir à faire des fonctions "génériques".
Par exemple (ce n'est qu'un exemple) pour les arbres AVL (ou autre) du passe une fonction de comparaison, comme ca ta librairie d'arbre AVL marche pour quoi que ce soit, et n'est pas limiter a une comparison d'entier.

grace aux pointeurs de fonction du peux decider quelle fonction appeller. Par exemple moi je les est utilise partout dans ma source MATLAB COMPLEXE, il y a une fonction de dessin, une de calcul, ect ...

Par exemple quand tu veix faire une fonction qui permet d'avoir des bitmaps transparentes, tu passes une fonction qui dit si oui ou non ce pixel doit etre transparent ou non (cf une de mes sources).

Bon moi comment moi je les utilise, peut-etre (surement) d'autres les utilisent pour autres choses ...

Commentaire de TeLeTUbIz le 07/07/2004 16:12:30

Ouai, on les utilise pour pleins de choses: les tris par exemple:
comme ca ca permet de trier des objets dans un ordre ou dans l'ordre complet, ou selon tel paramètre et puis finalement avec un autre paramtère (ordre alphabétique, valeur, etc...) tout en gardant la même fonction. C'est utile lorsque les tris sont super complexe à faire.
Sinon, ben pour le commun du logiciel, ca n'a aucun intérêt particulire (la pluspart du temps) c'est plutôt orienté vers la l'algo de pointe (ce qui touche aux conteneurs (arbres, listes...) au algos de tris, etc...)

Commentaire de TeLeTUbIz le 07/07/2004 16:12:30

Ouai, on les utilise pour pleins de choses: les tris par exemple:
comme ca ca permet de trier des objets dans un ordre ou dans l'ordre complet, ou selon tel paramètre et puis finalement avec un autre paramtère (ordre alphabétique, valeur, etc...) tout en gardant la même fonction. C'est utile lorsque les tris sont super complexe à faire.
Sinon, ben pour le commun du logiciel, ca n'a aucun intérêt particulire (la pluspart du temps) c'est plutôt orienté vers la l'algo de pointe (ce qui touche aux conteneurs (arbres, listes...) au algos de tris, etc...)

Commentaire de TeLeTUbIz le 07/07/2004 16:14:25

Arg, bien ce que je me disais, j'ai un peu la tremblotte aujourd'hui alors j'ai cliqué deux fois.

Commentaire de JCDjcd le 07/07/2004 21:04:30

Qu'est ce que tu appelles "commun logiciel" ?

Commentaire de TeLeTUbIz le 08/07/2004 17:28:25

Ben toute sorte de logiciels de type bureautique, traitements de texte, etc...
Enfin tout les logiciels courants.
C'est surtout (du moins je pense, je me trompe peut être) utilisé dans des logiciels à utilisation professionnelle comme les SGBD (bases de données) etc...
Je pense que ce genre de truc s'écarte un peu de la programmation classique (genre procédurale, très mécanique) et s'oriente plutôt vers la programmation dynamique. Enfin, pour ce qui est des logiciels, il est vrai qu'aujourd'hui avec les nombreuses bibliothèques qu'il existe, ca doit s'intégrer à de nombreux logicielsn même les plus courant, car il y'a souvent besoin de trier des choses ou de répéter une même opération sur des éléments différents.
C'est clair ? Hmmm... En me relisant je me trouve pas clair.

Disons en gros que ne pas savoir ça, ca ne chamboulera le travail de personne.

Commentaire de JCDjcd le 08/07/2004 17:33:51

Je pense qu'un "logiciel commun" se programme comme tout autre logiciel, et le maniment des pointeurs de fonction est indispensable a la pratique du langage C, c'est juste mon petit avis, mais des fois moi ca m'est bien utile. De toute maniere cela va avec l'apprentissage des pointeurs qui eux sont obligatoires ....

Commentaire de TeLeTUbIz le 08/07/2004 17:56:50

Ouai, tu as certainement raison. Mais je sais pas pkoi, ce truc m'avait parru être utilisé que dans des cas assez rares.

Commentaire de coucou747 le 17/07/2004 20:33:55 administrateur CS

bah pour ça on mat un parametre en plus dans la fonction, et on met un if dans cette fonction, c'est bcp plus simple, pour ceux qui n'ont pas envie d'aprendre...

Commentaire de TeLeTUbIz le 18/07/2004 10:24:34

Ah bah non.
^^ lol ^^
Parce que dans ce cas, il faut changer la fonction à chaque fois, donc le code est pas très générique.

Mais comme je le dis plus haut si t'as pas envie d'apprendre, c'est pas très grave :-)

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales