chapitre 04 : les fonctions

of 1/1

Post on 15-Jan-2017

328 views

Category:

Education

7 download

Embed Size (px)

TRANSCRIPT

  • Introduction au langage C++

    Chapitre 4

    Les fonctions

    Youssouf EL ALLIOUI, [email protected]

    Universit Hassan Premier de Settat

    Ce cours est disponible en format lectronique sur http://fr.slideshare.net/yelallioui/

    Objectif de ce chapitre

    la plupart des programmes informatique sont des programmes complexes. Ils

    comportent des dizaines de milliers de lignes et les grosses applications en comportent

    des millions. Si l'on garde tout dans une seule fonction, la fonction main() par exemple,

    il va tre trs difficile de s'y retrouver. Il serait certainement plus simple de dcouper ce

    programme en fonctions. Chaque fonction est destine effectuer une tche prcise et

    renvoie gnralement un rsultat. Dcouper son programme en fonctions permet de

    s'organiser.

    En plus, si vous tes plusieurs dveloppeurs travailler sur le mme programme,

    vous pourrez vous partager plus facilement le travail : chacun s'occupe dune fonction

    diffrente.

    Et ce n'est pas tout ! Prenons par exemple le calcul de la racine carre, que nous

    avons vu prcdemment. Si vous crez un programme de maths, il est bien possible que

    vous ayez besoin, plusieurs endroits, d'effectuer des calculs de racines. Avoir une

    fonction sqrt() va nous permettre de faire plusieurs de ces calculs sans avoir

    2016

    mailto:[email protected]://fr.slideshare.net/yelallioui/

  • 1 | 13

    1 Introduction au langage C++ | Chapitre 4 : Les fonctions

    recopier le mme code plusieurs endroits. On peut rutiliser plusieurs fois la mme

    fonction et c'est une des raisons principales d'en crire.

    Entranez-vous via

    Exercices applicatifs

    QCM fourni la fin de la sance

    Les TPs

    Sommaire

    I. Crer et utiliser une fonction __________________________________________ 2

    I. 1. Dclaration dune fonction ________________________________________ 2

    I. 2. Dfinition dune fonction _________________________________________ 2

    I. 3. Utilisation dune fonction _________________________________________ 3

    I. 4. Des fonctions qui ne renvoient rien _________________________________ 4

    II. Surcharge des fonctions ______________________________________________ 5

    III. Arguments par dfaut _____________________________________________ 6

    IV. Passage par valeur et passage par rfrence ____________________________ 7

    IV. 1. Passage par valeur ____________________________________________ 7

    IV. 2. Passage par rfrence _________________________________________ 8

    V. Utilisation de plusieurs fichiers ________________________________________ 9

    V. 1. Le fichier source ________________________________________________ 9

    V. 2. Le fichier header ________________________________________________ 0

    V. 3. Exemple dutilisation des fichiers source et header __________________ 1

    VI. Ce que vous devez retenir ! _________________________________________ 2

    Rfrences

    Cours de C/C++ [Ouvrage] / aut. Casteyde Christian. - 2001. - Vol. Version 1.40.1 : p. 501. Programmez avec le langage C++ [Ouvrage] / aut. Mathieu Nebra et Matthieu Schaller. - [s.l.] : le Livre du Zro, 2015.

  • 2 | 13

    2 Introduction au langage C++ | Chapitre 4 : Les fonctions

    I. Crer et utiliser une fonction

    Une fonction est caractrise par :

    1) son nom

    2) le type de valeur quelle renvoie,

    3) les paramtres quelle reoit pour faire son travail,

    4) linstruction-bloc qui effectue le travail (corps de la fonction).

    Les trois premiers lments sont dcrits dans la dclaration de la fonction. Llment n4

    figure dans la dfinition de la fonction. Toute fonction doit tre dfinie avant dtre

    utilise.

    I. 1. Dclaration dune fonction

    Toute fonction doit tre dclare avant dtre appele pour la premire fois. La dfinition

    dune fonction peut faire office de dclaration.

    Il peut se trouver des situations o une fonction doit tre appele dans une autre fonction

    dfinie avant elle. Comme cette fonction nest pas dfinie au moment de lappel, elle doit

    tre dclare.

    Le rle des dclarations est donc de signaler lexistence des fonctions aux compilateurs

    afin de les utiliser, tout en reportant leur dfinition de ces fonctions plus loin ou dans un

    autre fichier.

    La syntaxe de la dclaration dune fonction est la suivante :

    1 type nomDeLafonction (paramtres) ;

    Exemples :

    1 double Moyenne(double x, double y);

    2 char LireCaractere();

    3 void AfficherValeurs(int nombre, double valeur);

    NB : la dernire fonction nest pas destine renvoyer une valeur ; cest pourquoi le type

    du rsultat est void, une telle fonction est parfois appele procdure (voir I. 4 Des

    fonctions qui ne renvoient rien).

    I. 2. Dfinition dune fonction

    Il faut retenir la rgle suivante :

    Toute fonction doit tre dfinie avant dtre utilise

    La dfinition des fonctions se fait comme suit :

    1 type nomDeLafonction (paramtres) 2 { 3 instructions ; 4 }

  • 3 | 13

    3 Introduction au langage C++ | Chapitre 4 : Les fonctions

    On retrouve les quatre lments dont je vous ai dj parl :

    1) type est le type de la valeur renvoye par la fonction

    2) nomDeLaFonction est le nom ou lidentificateur de la fonction, et

    3) paramtres est une liste de paramtres. Ce sont les donnes avec lesquelles la

    fonction va travailler. Il peut y avoir un, plusieurs ou aucun paramtre.

    4) Linstruction-bloc : il sagit des accolades qui dlimitent le contenu de la fonction.

    Toutes les oprations qui seront effectues se trouvent entre les deux

    accolades.

    NB : Il est possible de crer plusieurs fonctions ayant le mme nom. Il faut alors que la

    liste des arguments des deux fonctions soit diffrente. C'est ce qu'on appelle

    la surcharge d'une fonction.

    Exemple :

    Commenons par une fonction basique. Une fonction qui reoit deux nombres rels a et

    b, et renvoie la somme a+b.

    1 double somme(double a, double b) 2 { 3 double r; 4 r = a + b; 5 return r; 6 }

    Dans ce programme, on a cr une fonction nomme somme qui reoit deux nombres

    rels a et b en paramtre et qui, une fois qu'elle a termin, renvoie un autre nombre r

    rel qui reprsente la somme de a et b.

    I. 3. Utilisation dune fonction

    Elle se fait grce lappel de la fonction. Prenons lexemple suivant :

    1 #include 2 using namespace std; 3 4 // dfinition de la fonction somme : 5 double somme(double a, double b) 6 { 7 double r; 8 r = a + b; 9 return r; 10 } 11 12 int main() 13 { 14 double x, y, resultat; 15 cout > x; 16 cout > y; 17 18 //appel de notre fonction somme 19 resultat = somme(x, y); 20

  • 4 | 13

    4 Introduction au langage C++ | Chapitre 4 : Les fonctions

    21 cout

  • 5 | 13

    5 Introduction au langage C++ | Chapitre 4 : Les fonctions

    2 { 3 cout

  • 6 | 13

    6 Introduction au langage C++ | Chapitre 4 : Les fonctions

    - Lors de lappel de somme(2,3), ce sera la deuxime, parce que 2 et 3 sont deux

    entiers.

    - Lors de lappel de somme(2.4, 3.3, 5.5), ce sera la premire qui sera appele,

    car 2.4, 3.3 et 5.5 sont trois rels.

    NB : Dans un appel tel que somme(2.5,3), le flottant 2.5 sera converti en entier et la

    deuxime fonction sera appele. Il convient donc de faire trs attention aux mcanismes

    de surcharges du langage, et de vrifier les rgles de priorit utilises par le compilateur.

    III. Arguments par dfaut

    On peut, lors de la dclaration dune fonction, donner des valeurs par dfaut certains

    paramtres des fonctions. Ainsi, lorsqu'on appelle une fonction, on ne sera pas oblig

    d'indiquer chaque fois tous les paramtres !

    Voir lexemple suivant :

    1 #include 2 3 using namespace std; 4 5 // Prototype avec les valeurs par dfaut 6 int nombreDeSecondes(int heures, int minutes = 0, int secondes = 0); 7 8 // Main 9 int main() 10 { 11 cout

  • 7 | 13

    7 Introduction au langage C++ | Chapitre 4 : Les fonctions

    seul le prototype doit contenir les valeurs par dfaut (pas la dfinition de la

    fonction) ;

    les valeurs par dfaut doivent se trouver la fin de la liste des paramtres

    vous pouvez rendre tous les paramtres de votre fonction facultatifs ?

    IV. Passage par valeur et passage par rfrence

    Il y a deux mthodes pour passer des variables en paramtres dans une fonction : le

    passage par valeur et le passage par rfrence. Ces mthodes sont dcrites ci-dessous.

    IV. 1. Passage par valeur

    La valeur de lexpression passe en paramtre est copie dans une variable locale. Cest

    cette variable qui est utilise pour faire les calculs dans la fonction appele.

    Pour mieux comprendre, Prenons le programme suivant qui ajoute 1 l'argument fourni en

    paramtre.

    1 #include 2 using namespace std; 3 4 int incrementerArgument (int a) 5 { 6 a+=1; 7 return a; 8 } 9 10 int main() 11 { 12 int nombre(4), resultat; 13 resultat = incrementerArgument(nombre); 14 15 cout

  • 8 | 13

    8 Introduction au langage C++ | Chapitre 4 : Les fonctions

    la variable passe en paramtre, parce que ces modifications ne s'appliquent qu' une

    copie de cette dernire.

    La mmoire ressemble donc ce qui se trouve dans le schma de la figure suivante.

    IV. 2. Passage par rfrence

    La deuxime technique consiste passer non plus la valeur des variables comme

    paramtre, mais plutt d'ajouter une deuxime tiquette la variable nombre

    l'intrieur de la fonction. Et c'est bien sr une rfrence qu'il faut utiliser comme

    argument de la fonction. Il n'y a donc plus de copie, plus de variable locale. Toute

    modification du paramtre dans la fonction appele entrane la modification de la variable

    passe en paramtre. Voir lamlioration apporte lexemple prcdent.

    1 #include 2 using namespace std; 3

    4 int incrementerArgument (int& a) //Notez bien le petit & ! { a+=2; return a; } 5 { 6 a+=1; 7 return a; 8 } 9 10 int main() 11 { 12 int nombre(4), resultat; 13 resultat = incrementerArgument(nombre); 14 15 cout

  • 9 | 13

    9 Introduction au langage C++ | Chapitre 4 : Les fonctions

    Cette fois, la variable a et la variable nombre sont confondues. On dit que

    l'argument a est pass par rfrence. La mmoire ressemble dans ce cas ce quest

    prsent dans le schma de la figure suivante.

    V. Utilisation de plusieurs fichiers

    Le C++ permet de dcouper son programme en plusieurs fichiers sources. Chacun tant

    spcialis dans une catgorie dactions prcise. Chaque fichier contient une ou plusieurs

    fonctions. On peut alors inclure les fichiers, et donc les fonctions, dont on a besoin dans

    diffrents projets.

    Pour le faire il ne faut deux fichiers au lieu dun seul :

    1) un fichier source dont l'extension est .cpp : il contient le code source de la

    fonction ;

    2) un fichier header dont l'extension est .h : il contient uniquement le prototype de

    la fonction.

    V. 1. Le fichier source

    Pour le crer, Choisissez Menu > File > New > File. Choisissez ensuite C/C++

    source ().

    Pour le crer, suivez les tapes suivantes :

    1) Choisissez Menu > File > New > File (Figure 1).

    2) Choisissez ensuite C/C++ source (Figure 2).

    3) Cliquez ensuite sur Go(Figure 2).

    4) Le programme vous demande le choix entre C ou C++. Choisissez C++ (Figure 3).

    5) Choisir le nom et lemplacement de votre fichier (Figure 4). Jai choisi le

    nom calcul.cpp.

    6) Cochez ensuite toutes les options (Figure 4).

    7) Cliquez sur Finish (Figure 4).

    a resultat

    nombre

    5

    4

    Mmoire

  • Figure 1 : Cration de nouveau fichier

    Figure 2 : Model de fichier

    Figure 3 : Langage de fichier (C ou C++)

    Figure 4 : Emplacement & nom de fichier

    Notre fichier source est maintenant cr. Passons au fichier header.

    V. 2. Le fichier header

    Pour crer le fichier header, nous gardons les mmes tapes prcdentes avec des petites

    modifications :

    1) Choisissez Menu > File > New > File (Figure 1).

    2) Choisissez ensuite C/C++ header (Figure 2).

    3) Cliquez ensuite sur Go(Figure 2).

    4) Le programme vous demande le choix entre C ou C++. Choisissez C++ (Figure 3).

    5) Choisir le nom et lemplacement de votre fichier (Figure 4). Il est conseill de lui

    donner le mme nom qu'au fichier source mais avec une extension .h au lieu

    de .cpp. Dans notre cas, ce sera donc calcul.h.

    6) Cochez ensuite toutes les options (Figure 4).

    7) Cliquez sur Finish (Figure 4).

    Et voil ! Le deuxime fichier a t cr.

    Vous devriez maintenant voir les deux fichiers calcul.cpp et calcul.h apparatre dans

    la colonne de gauche de Code::Blocks (Figure 5).

  • 1 | 13

    1 Introduction au langage C++ | Chapitre 4 : Les fonctions

    Figure 5 : Architecture de notre projet aprs l'ajout des fichiers source et header

    V. 3. Exemple dutilisation des fichiers source et header

    Maintenant que nous avons nos fichiers source et header, il ne reste qu' les remplir et

    les inclure dans le fichier main.cpp.

    Le fichier source : calcul.cpp

    Voici le fichier calcul.cpp au complet :

    1 #include "calcul.h" 2 3 double somme(double a, double b) 4 { 5 double r; 6 r = a + b; 7 return r; 8 }

    Le compilateur a besoin de savoir que les fichiers .cpp et .h ont un lien entre eux. Cest

    pour cela nous avons commenc le fichier par la ligne : #include "calcul.h". Elle

    indique que l'on va utiliser ce qui se trouve dans le fichier calcul.h.

    NB : Il faut utiliser ici des guillemets " et non des chevrons < et > .

    Le fichier header : calcul.h

    Dans ce fichier, il faut mettre les prototypes des fonctions. Voici ce que nous obtenons

    pour notre fonction somme :

    1 #ifndef CALCUL_H_INCLUDED 2 #define CALCUL_H_INCLUDED 3 4 double somme(double a, double b); 5 6 #endif // CALCUL_H_INCLUDED

    NB :

    - N'oubliez pas le point-virgule

    - Si vous utilisez des variables plus compliques en argument comme des strings,

    vous devez ajouter la ligne d'inclusion #include avant le prototype.

  • 2 | 13

    2 Introduction au langage C++ | Chapitre 4 : Les fonctions

    Et voil ! Il ne nous reste qu'une seule chose faire : inclure tout cela dans le

    fichier main.cpp.

    Le fichier de test : main.cpp

    Le fichier main.cpp au complet :

    1 #include 2 #include "calcul.h" 3 4 using namespace std; 5 6 int main() 7 { 8 double x, y, resultat; 9 cout > x; 10 cout > y; 11 12 //appel de notre fonction somme 13 resultat = somme(x, y); 14 15 cout

  • 3 | 13

    3 Introduction au langage C++ | Chapitre 4 : Les fonctions

    Lorsque le programme grossit, il est conseill de crer plusieurs fichiers

    regroupant des fonctions. Les fichiers .cpp contiennent les dfinitions des

    fonctions et les fichiers .h contiennent leurs prototypes.

    Les fichiers .h permettent d'annoncer l'existence des fonctions l'ensemble des

    autres fichiers du programme.

    Notez bien quune fonction ne peut renvoyer plus qu'une valeur. Elle produit

    toujours au maximum un seul rsultat.