Introduction aux fonctions en C++

22 Mar 2022 22 Mar 2022 2940 vues ESSADDOUKI Mostafa 9 min de lecture
Introduction et syntaxe de base
1 Introduction au langage C++ 2 Entrée-sortie en C++ - cin et cout 3 Inférence de type avec le mot-clé auto en C++ 4 Classe std::string et les chaînes de caractères en C++ 5 Les structures conditionnelles (if et switch) en C++ (C++17 et C++20) 6 Les boucles en C++ (C++17 et C++20) 7 La gestion des fichiers en C++
Pointeurs et fonctions
8 Introduction aux pointeurs en C++ - Déclaration et interêts 9 Les références en C++ - déclaration et interêts 10 Les tableaux en C++ - Déclaration et interêts 11 Introduction aux fonctions en C++ 12 Passer des arguments à une fonction en C++ 13 Déclarer un paramètre const en C++ 14 Les fonctions Lambda en C++ 15 Fonctions utiles (Mathématiques et caractères) en C++
Programmation OO
16 Classes et objets en C++ 17 Spécificateurs d'accès en C++ 18 Constructeurs et destructeur d'une classe en C++ 19 Fonctions membres en C++ 20 Membres statiques d'une classe en C++ 21 Fonctions en ligne en C++ - inline 22 Fonctions et classes amies en C++ - friend 23 Surcharge des fonctions en C++ 24 Surcharge des opérateurs en C++ 25 Héritage en C++ 26 La gestion d'exceptions en C++ : déclaration, utilisation et personnalisation 27 fonctions et classes templates en C++ 28 Les nouveautés C++20 pour améliorer les templates en C++
Structures de données
29 Introduction aux structures de données 30 Les structures en C++ et la différence avec les structures en C 31 Les listes chaînées en C++ 32 Les piles en C++ 33 File d'attente en C++ 34 Arbre binaire de recherche : définition et mise en oeuvre en C++
La bibliothèque standard (STL)
35 Introduction à la bibliothèque de Template Standard STL 36 Les itérateurs en C++ - définition, déclaration et exemples 37 La classe array en C++ (bibliothèque STL) <array> 38 La classe vector de la bibliothèque STL <vector> 39 La classe deque en C++ ( Bibliothèque STL) 40 La classe list en C++ (bibliothèque STL) <list> 41 La classe stack (Pile) en C++ (bibliothèque STL) <stack> 42 La classe queue (File d'attente) en C++ (bibliothèque STL) <queue> 43 La file d'attente prioritaire (classe priority_queue) - Bibliothèque STL 44 Les ensembles en C++ (Classe set <set> - Bibliothèque STL) 45 Les dictionnaires en C++ : Classe map (Bibliothèque STL) 46 Introduction aux algorithmes de la bibliothèque STL (programmation compétitive) 47 Tri et méthodes associées en C++ - Bibliothèque STL 48 Recherche dichotomique et méthodes associées en C++ - Bibliothèque STL 49 Appliquer un prédicat ou une fonction aux éléments d'une séquence en C++ - Bibliothèque STL 50 Recherche dans une séquence et méthodes associées en C++ - Bibliothèque STL

Les fonctions en C++

Définition

La segmentation d'un programme en morceaux de code gérables est fondamentale pour la programmation dans tous les langages. Une fonction est un bloc de construction de base dans les programmes C++.

Jusqu'à présent, chaque exemple avait une fonction, main(), et utilisait généralement des fonctions de la bibliothèque standard. Dans ce cours, vous apprendrez à définir vos propres fonctions.

Structure d'une application C++

Une application C++ se compose de nombreuses fonctions, chacune fournissant une capacité distincte bien définie. L'exécution commence dans main(), qui doit être défini dans l'espace de noms global.

main() appelle d'autres fonctions, chacune pouvant appeler d'autres fonctions, et ainsi de suite. Les fonctions autres que main() peuvent être définies dans un espace de noms que vous créez.

Définir des fonctions

Qu'est-ce qu'une fonction ?

Une fonction est un bloc de code autonome avec un objectif spécifique. Les définitions de fonctions ont en général la même structure de base que main().

Structure d'une définition de fonction

Une définition de fonction consiste en un en-tête de fonction suivi d'un bloc contenant le code de la fonction. L'en-tête de fonction spécifie trois choses :

  • 1. Type de retour : Le type de valeur que la fonction renvoie (ou void si rien n'est retourné).
  • 2. Nom de la fonction : Les fonctions sont nommées selon les mêmes règles que les variables.
  • 3. Liste des paramètres : Le nombre et les types des données passées à la fonction.

Syntaxe générale

   
Syntaxe d'une fonction C++
type_retour nom_fonction(liste_parametres)
{
    // Corps de la fonction...
}

Exemple 1 : Fonction calculant un périmètre

Exemple

Fonction perimetre()

La fonction suivante calcule le périmètre d'un rectangle défini par 2 × (longueur + largeur)

double perimetre(double largeur, double longueur)
{
    double res;
    res = 2 * (largeur + longueur);
    return res;
}

Explication :

  • La fonction a deux paramètres : largeur et longueur (type double).
  • Elle calcule le périmètre et stocke le résultat dans une variable locale res.
  • L'instruction return res; renvoie la valeur calculée.
  • Le type de retour est double, correspondant au résultat.

Appel de la fonction

double lar {3.4};
const double resultat = perimetre(lar, 2.7);
Arguments vs Paramètres

Le terme argument est utilisé pour les valeurs transmises à une fonction lorsqu'elle est appelée. Ainsi, dans notre exemple, lar et 2.7 sont des arguments, et largeur et longueur sont les paramètres correspondants.

Règles importantes

  • La séquence d'arguments doit correspondre à la séquence des paramètres (ordre et types).
  • Si les types ne correspondent pas exactement, le compilateur applique des conversions implicites si possible.
  • La combinaison du nom de la fonction et de la liste des paramètres est appelée la signature de la fonction.
  • Le compilateur utilise la signature pour distinguer les fonctions (surtout pour la surcharge).

Exemple 2 : Fonction sans valeur de retour (void)

Toutes les fonctions ne doivent pas nécessairement renvoyer une valeur. Le mot-clé void est utilisé pour spécifier qu'une fonction ne renvoie pas de valeur.

void afficher(int a)
{
    cout << "a : " << a;
}

Explication :

  • Le type de retour est void (aucune valeur retournée).
  • La fonction affiche simplement la valeur à l'écran.
  • Il n'y a pas d'instruction return (ou éventuellement return; sans valeur).

Variables locales

Portée des variables

Les variables que vous définissez dans le corps d'une fonction et tous les paramètres sont locaux à la fonction. Vous pouvez utiliser les mêmes noms dans d'autres fonctions à des fins très différentes.

La portée de chaque variable s'étend du point auquel elle est définie jusqu'à la fin du bloc qui la contient.

Exceptions

Les seules exceptions à cette règle sont les variables définies comme statiques (discutées plus tard).

Valeur de retour

Règle fondamentale

Une fonction avec un type de retour autre que void doit retourner une valeur du type spécifié dans l'en-tête de la fonction.

La seule exception à cette règle est la fonction main(), où atteindre l'accolade fermante équivaut à renvoyer 0.

L'instruction return

La valeur de retour est calculée dans le corps de la fonction et est renvoyée par l'instruction return, qui termine la fonction. L'exécution continue ensuite à partir du point d'appel.

Comment la valeur est-elle retournée ?

Une copie de la valeur retournée est faite automatiquement, et cette copie est mise à la disposition de la fonction appelante. C'est pourquoi on peut retourner une variable locale : sa copie survit à la destruction de la variable.

Syntaxe de return

   
Syntaxe générale C++
return expression;
  • expression doit évaluer à une valeur du type spécifié (ou convertible à ce type).
  • expression peut inclure des appels de fonction (y compris récursifs).
  • Pour une fonction void : return; (sans expression).
Important

Si le type de retour n'est pas void, toutes les branches de la fonction doivent renvoyer une valeur. Atteindre l'accolade fermante sans return est une erreur (sauf pour main()).

Déclarations de fonctions (Prototypes)

Règle de déclaration

Les fonctions doivent être déclarées avant de pouvoir être appelées. Cela ne signifie pas qu'elles doivent être implémentées avant, mais que l'en-tête de la fonction doit être spécifié au début du fichier source pour que le compilateur sache qu'elle existe.

Ce type de déclaration est connu sous le nom de prototype de fonction.

Utilité d'un prototype

  • Il décrit une fonction suffisamment pour que le compilateur puisse compiler les appels à cette fonction.
  • Il définit le nom de la fonction, son type de retour et sa liste de paramètres.
  • Une fonction ne peut être appelée que si l'appel est précédé d'une déclaration.

Exemple 3 : Utilisation d'un prototype

   
Prototype et définition séparés C++
#include <iostream>

using namespace std;

double perimetre(double largeur, double longueur); // PROTOTYPE

int main(void)
{
    double lar {3.4};
    const double resultat = perimetre(lar, 2.7);  // Appel (OK grâce au prototype)
    
    cout << resultat;
    
    return 0;
}

double perimetre(double lar, double lon) // DÉFINITION
{
    double res;
    res = 2 * (lar + lon);
    return res;
}

Caractéristiques des prototypes

  • Un prototype se termine toujours par un point-virgule.
  • Il n'est pas nécessaire qu'il soit identique à l'en-tête de la fonction.
  • Les noms des paramètres peuvent être différents (mais pas les types).
  • Les noms des paramètres sont optionnels (mais recommandés pour la documentation).

Forme minimale

double perimetre(double, double);  // Noms des paramètres omis
Bonne pratique

Il est recommandé d'écrire des prototypes pour chaque fonction définie dans un fichier source (sauf main()). Cela permet de :

  • Placer les fonctions dans n'importe quel ordre dans le fichier.
  • Éviter les erreurs de compilation dues à une séquence inadéquate.
  • Donner aux autres programmeurs un aperçu des fonctionnalités du code.

Récapitulatif des éléments d'une fonction

ÉlémentDescriptionExemple
Type de retourType de la valeur retournée (ou void)double, int, void
NomIdentifiant de la fonctionperimetre, afficher
ParamètresListe des entrées de la fonction(double largeur, double longueur)
CorpsBloc de code entre accolades{ return 2*(l+L); }
PrototypeDéclaration avant utilisationdouble perimetre(double, double);
SignatureNom + liste des paramètresperimetre(double, double)
 Exercice pratique

Écrire une fonction

 Niveau : Débutant

Écrire une fonction maxDeux qui prend deux entiers en paramètres et retourne le plus grand des deux.

Contraintes :

  1. Écrire le prototype de la fonction.
  2. Écrire la définition complète de la fonction.
  3. Écrire un programme principal qui teste la fonction avec plusieurs paires de valeurs.
Points clés à retenir
  • Une fonction est un bloc de code réutilisable avec un objectif spécifique.
  • La définition d'une fonction comprend : type de retour, nom, paramètres, corps.
  • Les paramètres sont les variables définies dans l'en-tête ; les arguments sont les valeurs passées lors de l'appel.
  • Une fonction peut retourner une valeur (type spécifié) ou rien (void).
  • L'instruction return termine la fonction et renvoie une valeur (sauf pour void).
  • Les variables définies dans une fonction sont locales (portée limitée au bloc).
  • Un prototype déclare une fonction avant son utilisation (se termine par ;).
  • La signature d'une fonction (nom + paramètres) permet de la distinguer des autres.
  • La fonction main() est spéciale : pas de prototype nécessaire, return implicite 0.

Discussion (0)

Soyez le premier à laisser un commentaire !

Laisser un commentaire

Votre commentaire sera visible après modération.