Cours langage C++ les fonctions, tutoriel & guide de travaux pratiques en pdf.
Une fonction est une opération définie par l’utilisateur. En général, on définit une fonction par un nom plutôt que par un opérateur. Les opérandes d’une fonction, appelés ses arguments, sont spécifiés par l’intermédiaire d’une liste fermée par des parenthèses et dont les éléments sont séparés par des virgules. Une fonction a également une valeur de retour d’un certain type: si aucune valeur n’est retournée par la fonction, cette valeur est dite de type void. Pour des raisons historiques (compatibilité avec C), ne pas spécifier de type pour une fonction est équivalent à la spécifier de type int (et non pas void ! ).
La fonction suivante calcule le PGCD de deux nombres entiers (int gcd(int, int)).
#include<iostream.h> int gcd(int v1, int v2)
{ int tmp; while (v2) { temp = v2; v2 = v1 % v2; v1 = temp; } return v1; }
main(char*, int)
{ cout<<« Le plus grand dénominateur commun de 100 et 30 est « << gcd(100,30)<<endl; }
Une fonction est évaluée chaque fois que l’opérateur d’appel « () » est appliqué au nom de la fonction. La définition d’une fonction, accompagnée de la liste des types d’arguments passés à la fonction, sert également de déclaration. Mais il n’est pas possible de définir plus d’une fois la même fonction dans un programme. Une fonction est définie par son nom et la liste de types d’arguments passés à la fonction, mais pas par le type retourné (la raison n’en est pas claire).
void Foo(int, int); // fonction Foo void Foo(float, int); // Autre fonction Foo : les paramètres // ont des types différents, il s’agit // donc d’une autre fonction que la // précédente int Foo(float, int); // Faux ! même définition que la pré// cédente. Le type de retour ne fait // pas partie de la définition pro// prement dite.
Généralement, une fonction est définie dans un fichier séparé de ceux où elle va être utilisée. Dans les fichiers où elle sera utilisée, cette fonction doit être déclarée séparément. Ceci se fait à l’aide d’un prototype :int gcd(int, int);
Notons que seuls les types des arguments sont définis, non les noms des arguments. Il est néanmoins possible de donner des noms à ces arguments, et cette possibilité devrait être utilisée à des fins de documentation. Il est possible de faire apparaître un prototype plusieurs fois dans un même fichier source sans problèmes.
Certains compilateurs (Metrowerks Code Warrior, par exemple) interprètent la norme ANSI de manière très stricte, et demandent l’établissement d’un prototype pour toute fonction exportable, alors que d’autres ne requièrent pas obligatoirement cette définition. La norme, interprétée de manière stricte, tend à rendre mandatoire la définition d’un fichier en-tête (.h) pour tout module de programmation définissant des fonctions réutilisables. Cette habitude ne pouvant être qu’encouragée, l’interprétation stricte de la norme est donc une excellente chose.