Les fonctions
CHAPITRE 8
162
4.6 Surdéfinition des fonctions
La plupart des langages permettent de définir plusieurs fonctions ayant le même nom et se
distinguant par le nombre et le type de leurs paramètres. On parle alors de surdéfinition (ou
encore de surcharge). Par exemple, nous pourrons définir ces deux fonctions sosie :
fonction sosie (entier n)
// fonction 1
{ .....
}
fonction sosie (réel x)
// fonction 2
{ .....
}
Voici quelques exemples d’appels avec leurs conséquences :
entier n
réel y
.....
sosie (n)
// appelle la fonction 1
sosie (y)
// appelle la fonction 2
sosie (2*y-5) // appelle la fonction 2
sosie (n, y) // erreur
D’une manière générale, les règles de « recherche de la bonne fonction » peuvent être
différentes d’un langage à un autre. Elles peuvent devenir complexes dans les langages qui
autorisent des conversions des paramètres effectifs de l’appel d’une fonction. Cependant,
dans tous les cas, elles se basent uniquement sur ce que l’on nomme la signature de la
fonction (nom de la fonction et type des arguments). Le type du résultat n’intervient jamais ;
en effet, il n’est pas toujours « visible » dans un appel, compte tenu des possibilités de
conversion implicitie qui existent. Par exemple, avec :
réel y
entier n
y = f(n)
f peut très bien fournir un résultat de type entier ou réel.
Nous conviendrons qu’une telle surdéfinition est possible mais, en fait, nous ne l’utiliserons
que pour les constructeurs de classes.
5 Gestion de la mémoire des variables locales :
notion de pile
À propos des tableaux, nous avons été amenés à évoquer deux modes de gestion de la
mémoire et nous avions distingué :
• l’allocation statique, où les emplacements mémoire sont définis à la traduction du
programme (généralement la compilation) ;
• l’allocation dynamique où les emplacements mémoire sont « alloués » pendant l’exécution
du programme.
CHAPITRE 8
162
4.6 Surdéfinition des fonctions
La plupart des langages permettent de définir plusieurs fonctions ayant le même nom et se
distinguant par le nombre et le type de leurs paramètres. On parle alors de surdéfinition (ou
encore de surcharge). Par exemple, nous pourrons définir ces deux fonctions sosie :
fonction sosie (entier n)
// fonction 1
{ .....
}
fonction sosie (réel x)
// fonction 2
{ .....
}
Voici quelques exemples d’appels avec leurs conséquences :
entier n
réel y
.....
sosie (n)
// appelle la fonction 1
sosie (y)
// appelle la fonction 2
sosie (2*y-5) // appelle la fonction 2
sosie (n, y) // erreur
D’une manière générale, les règles de « recherche de la bonne fonction » peuvent être
différentes d’un langage à un autre. Elles peuvent devenir complexes dans les langages qui
autorisent des conversions des paramètres effectifs de l’appel d’une fonction. Cependant,
dans tous les cas, elles se basent uniquement sur ce que l’on nomme la signature de la
fonction (nom de la fonction et type des arguments). Le type du résultat n’intervient jamais ;
en effet, il n’est pas toujours « visible » dans un appel, compte tenu des possibilités de
conversion implicitie qui existent. Par exemple, avec :
réel y
entier n
y = f(n)
f peut très bien fournir un résultat de type entier ou réel.
Nous conviendrons qu’une telle surdéfinition est possible mais, en fait, nous ne l’utiliserons
que pour les constructeurs de classes.
5 Gestion de la mémoire des variables locales :
notion de pile
À propos des tableaux, nous avons été amenés à évoquer deux modes de gestion de la
mémoire et nous avions distingué :
• l’allocation statique, où les emplacements mémoire sont définis à la traduction du
programme (généralement la compilation) ;
• l’allocation dynamique où les emplacements mémoire sont « alloués » pendant l’exécution
du programme.
