Notre fonction cube_nombre nest guère pratique, car elle ne permet de calculer que le cube de la variable nombre ; on pourrait bien sûr écrire une fonction comme celle-là pour chaque variable, mais ce serait fastidieux. Il est préférable décrire une fonction générale calculant le cube dun nombre quelconque.
Voici une telle fonction :
int cube(int x) { return x * x * x; }
Ici nous avons précisé un argument entre parenthèses, alors que cube_nombre nen avait pas, ce qui sexprimait par le terme void. Largument est un entier, ce qui est exprimé par lindication de type int. On lui donne le nom x pour la durée de la fonction, afin de pouvoir le désigner à lintérieur de celle-ci ; cela nest pas obligatoire mais, si on ne le faisait pas, on ne pourrait calculer le cube de cet argument, puisquon ne pourrait y faire référence.
A présent, dans le programme principal, on devra indiquer la valeur de largument (nommée le paramètre effectif) de cube avant dappeler celle-ci, comme ceci :
cout << cube(nombre);
Loubli du paramètre entraînerait une erreur de compilation (Error : Too few parameters in call to 'cube(int)', cest-à-dire trop peu de paramètres dans lappel de cube(int)).
Notons quune expression entière peut être passée en paramètre à cube, si son résultat est du type int :
cout << cube(nombre+1);
On obtient ainsi dagréables raccourcis décriture.
Exercice 1.2 | Comment écrirait-on cube(cube(nombre)) sans utiliser de fonctions ? |
Voir solution |
Une fonction peut avoir autant darguments que souhaité, avec des types différents éventuellement. Par exemple, la fonction mathématique suivante, tirée de la librairie <math.h>, admet deux arguments, le premier de type double
, le second de type int
, et renvoie une valeur de type double
:
double ldexp(double x, int exp);
Dautre part, il arrive que certaines fonctions ne renvoient aucun résultat (). Dans ce cas, elles sont déclarées avec pour résultat void ; ce mot réservé sert donc de « remplissage » soit pour une liste darguments vide, soit pour un résultat inexistant. Voici deux exemples tirés de la librairie <conio.h> :
void gotoxy(int x, int y) ; void clrscr(void);
Lorsquon désire arrêter le déroulement dune telle fonction, on peut écrire une instruction return sans rien derrière ; en labsence dune telle instruction, la fonction se termine sur laccolade fermante. Toutes les autres fonctions doivent avoir une instruction return, sinon elles renvoient un résultat aléatoire (un message derreur prévient de loubli dans certains cas : Error : Function should return a value, cest-à-dire la fonction doit renvoyer une valeur).
Le concept de fonction est central en C++, et nous en verrons de nombreux exemples ultérieurement.
Précédent | Sommaire | Suivant |