Les fonctions
 
 

     Avant toute chose, par defaut en C/C++ , les arguments sont passés par valeur
(sauf les tableaux).
 
  Egalement : une fonction ne peut pas être définie à l'intérieur d'une autre fonction
 

 voir ici les passages par référence et par pointeur

 voir ici les passages de fonctions en argument d'autres fonctions
 
 
 
 

Exemple de définition de fonction

double f0(double x, double y)
{
double z;
z=x*x+y;
return z;
}

appel par

double a,b,c;
a=f0(b,c);
 
 

Une fonction n'a pas forcément d'argument

int un()
{
cout << "fonction un";
return 1;
}

 appel par

int i0;
i0=un();
 
 
 
 
 
 
 
 
 

Une fonction peut être de type void (vide: une procedure en fait)

void imprime( char c)
{
cout << c <<endl ;
return;          // le return est facultatif dans ce cas
}

appel par

char c0;
imprime(c0);
 
 

Les fonctions sont declarées avant le programme principal

#include <iostream>

using namespace std;

float x2=6.0;                 //   variable globale
float cube(float x)
{
return(x*x*x);
}
int main()
{
float x0,y;
x0=x2;
y=cube(x0);
cout << y << endl;
return 0;
}
 
 

On peut aussi n'écrire que l'interface (le prototype) de la fonction avant le programme principal
(l'implémentation étant écrite a un autre endroit)

#include <iostream>

using namespace std;

float x2=6.0;                 //   variable globale
float cube(float x);         //  attention au point virgule dans ce cas

int main()
{
float x0,y;
x0=x2;
y=cube(x0);
cout << y << endl;
return 0;
}

float cube(float x)
{
return(x*x*x);
}
 
 
 
 
 
 
 

Les interfaces et implémentations des différentes fonctions se trouveront dans des fichiers différents pour de gros projets. Dans l'exemple précédent , la ligne

float cube(float x);

se trouverait dans le fichier cube.h, l'implémentation dans le fichier cube.cpp, et on aurait au début la ligne

#include "cube.h"
 
 
 

Les fonctions peuvent etre récursives

void recursive(int n)
{
int profondmax=10;
if  (n== profondmax) return;
else
{
// inserez votre code ici
recursive(n+1);
}
return;
}

 appel par

recursive(1);
 
 
 

En C++, une fonction peut avoir des arguments par défaut
 

float ajoute( float x=1.0, float y=2.0)
{
return x+y;
}

 appel par

float z;
z=ajoute(3,4);     // 3+4
z=ajoute(3);        // 3 + 2 (valeur par defaut)
z=ajoute();          // 1 + 2 ( les 2 arguments prennent leur valeur par defaut)
//   Attention, on ne peut pas donner au 1er argument sa valeur par defaut
//     tout en modifiant le 2ieme
 
 

En C++, une fonction peut être inline

On rajoute inline devant la fonction, la fonction est remplacée automatiquement par son contenu partout dans le programme.

inline float sqr(float x)
{
return x*x;
}
 
 
 

Les variables sont réinitialisées a chaque appel, sauf si on les déclare static
 

#include <iostream>

using namespace std;

double incremente( double x)
{
static double total = 0 ;     // initialisé seulement au debut
total += x;
return total;
}
int main()
{
double y;
y = incremente(10);
cout << y << endl;
y = incremente(20);
cout << y <<endl;
return 0;
}
 
 
 
 
 

Des fonctions similaires opérant avec des arguments de type différents ou un nombre différent d'arguments peuvent avoir le meme nom, on appelle cela  surcharge .

Drupal 7 Appliance - Powered by TurnKey Linux