intro_cpp_complement.pdf

(102 KB) Pobierz
Notion de portée locale (1)
Les notions de
portée
locale
v.s.
globale
définies pour les blocs
sont également valides dans le cadre des fonctions
1
.
Comme dans le cas des blocs,
la
portée
permet de résoudre les problèmes de conflits
de référençage entre entités
externes
(i.e. définies à l’extérieur du corps
de la fonction) et entités
internes
(i.e. définies dans le corps-même de la fonction).
Exemple:
int
i(2);
void
f(int a);
void
main {
f(i);
}
void
f(int a) {
int
i(10);
cout <<
a*i
<< endl;
}
Quelle variable est référencée par le
i
de l’instruction
cout << a*i << endl
?
1. Cela est bien naturel, puisque le corps d’une fonction n’est autre qu’un bloc.
Informatique I
Introduction à C++ (III: fonctions)
– 16 –
Notion de portée locale (2)
Les règles utilisées en C++ sont:
En cas de conflit de référence entre une entité interne et une entité externe,
l’entité interne est systématiquement choisie;
on dit que les
références
internes sont de portée locale,
i.e. limitées aux entités internes de la fonction.
On dit également que les entités internes
masquent
les entités externes.
Les
arguments formels
d’une fonction constituent des
entités internes
à sa définition.
Les références (non ambiguës) à des entités externes sont possibles
2
.
Il est néanmoins préférables de les éviter, en
explicitant systématiquement
toute référence à une entité externe
par le biais d’un argument formel.
2. Une fonction modifiant des variables externes sera dite «à
effet de bord»,
ce qui est fortement déconseillé.
Informatique I
Introduction à C++ (III: fonctions)
– 17 –
Notion de portée locale (3)
Schématiquement, ces règles peuvent se représenter par:
void main();
int f(const int
x);
int
z;
void main()
{
int
x,y;
...
...
z=f(y);
...
}
int f(const int
x)
{
int
y;
...
...
...
x
...
...
y
...
...
z
...
}
Informatique I
Introduction à C++ (III: fonctions)
– 18 –
Le passage des arguments
En C++, on distingue pour les fonctions
2 types de
passage d’arguments:
le
passage par
valeur:
dans lequel la fonction travaille sur
des
copies locales
des arguments transmis
et le
passage par
référence:
dans lequel la fonction travaille effectivement
l’argument
transmis
lui-même.
Informatique I
Introduction à C++ (III: fonctions)
– 19 –
Passage par valeur (1)
La variable locale associée à un argument formel
passé par valeur
correspond à une
copie locale
de l’argument
utilisé lors de l’appel de la fonction.
C’est donc une entité distincte,
mais de même valeur littérale, et en conséquence,
les modifications éventuelles apportées à l’argument formel
à l’intérieur de la fonction n’affectent pas la variable originale:
Les modifications effectuées à l’intérieur de la fonction
ne sont pas répercutées à l’extérieur.
Informatique I
Introduction à C++ (III: fonctions)
– 20 –
Zgłoś jeśli naruszono regulamin