Vous êtes sur la page 1sur 70

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Algorithmique 2 et structures de donnes avances


Lebbah Fatima Zohra
Ecole Prparatoire en Sciences et Techniques d'Oran EPSTO 2me anne, Semestre 3 (S3)

December 6, 2011

1 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Contenu du cours
1

3 4

Chapitre I : Techniques de programmation C++ Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux Porte des fonctions et des variables La passage des arguments La porte des variables Programmation modulaire La compilation spare
2 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Les pointeurs (dnitions)


Adresse Une variable e Une variable est physiquement identie de faon unique par son adresse, c'est--dire l'adresse de l'emplacement mmoire qui contient sa valeur.

3 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Les pointeurs (dnitions)


Adresse Une variable e Une variable est physiquement identie de faon unique par son adresse, c'est--dire l'adresse de l'emplacement mmoire qui contient sa valeur. Pointeur Un pointeur est une variable qui contient l'adresse d'un autre objet informatique.

3 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Dclaration d'un pointeur


Les pointeurs se dclarent en donnant le type de l'objet qu'ils devront pointer, suivi de leur identicateur prcd d'une toile :

4 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Dclaration d'un pointeur


Les pointeurs se dclarent en donnant le type de l'objet qu'ils devront pointer, suivi de leur identicateur prcd d'une toile : Comment dclarer un pointeur ? type *identicateur; ou bien type * identicateur;

4 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Dclaration d'un pointeur


Les pointeurs se dclarent en donnant le type de l'objet qu'ils devront pointer, suivi de leur identicateur prcd d'une toile : Comment dclarer un pointeur ? type *identicateur; ou bien type * identicateur; de type int.
exemple : int *x; dclare une variable x qui pointe sur une valeur

4 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Initialisation d'un pointeur


L'initialisation d'un pointeur se fait selon la syntaxe suivante :

5 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Initialisation d'un pointeur


L'initialisation d'un pointeur se fait selon la syntaxe suivante : Comment initialiser un pointeur ? type* identiateur(adresse);

5 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Initialisation d'un pointeur


L'initialisation d'un pointeur se fait selon la syntaxe suivante : Comment initialiser un pointeur ? type* identiateur(adresse);
exemples :

int *ptr(0); int *ptr(&i);

5 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Oprateurs associs aux pointeurs


Les deux oprateurs particuliers en relation avec les pointeurs sont : & et *. L'oprateur unaire & : retourne l'adresse mmoire de la valeur d'une variable. Si x est de type type, &x est de type type* (pointeur sur type).

6 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Oprateurs associs aux pointeurs


Les deux oprateurs particuliers en relation avec les pointeurs sont : & et *. L'oprateur unaire & : retourne l'adresse mmoire de la valeur d'une variable. Si x est de type type, &x est de type type* (pointeur sur type). int x(3); int* px; px = &x;
6 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Oprateurs associs aux pointeurs


Les deux oprateurs particuliers en relation avec les pointeurs sont : & et *. L'oprateur unaire & : retourne l'adresse mmoire de la valeur d'une variable. Si x est de type type, &x est de type type* (pointeur sur type). int x(3); int* px; px = &x;
6 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Oprateurs associs aux pointeurs(2)


L'oprateur unaire d'indirection * : retourne la valeur pointe

par une variable pointeur. Si px est de type type*, (*px) est la valeur de type type pointe par px.

7 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Oprateurs associs aux pointeurs(2)


L'oprateur unaire d'indirection * : retourne la valeur pointe

par une variable pointeur. Si px est de type type*, (*px) est la valeur de type type pointe par px. int x(3); // x est de type entier int* px; // px est un pointeur sur entier px = &x; // px pointe sur la variable x cout  *px  endl; // ache la valeur pointee par px ache 3
7 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Oprateurs associs aux pointeurs(2)


L'oprateur unaire d'indirection * : retourne la valeur pointe

par une variable pointeur. Si px est de type type*, (*px) est la valeur de type type pointe par px. int x(3); // x est de type entier int* px; // px est un pointeur sur entier px = &x; // px pointe sur la variable x cout  *px  endl; // ache la valeur pointee par px ache 3
7 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Oprateurs associs aux pointeurs(2)


L'oprateur unaire d'indirection * : retourne la valeur pointe

Note : *&i est donc strictement quivalent i.

par une variable pointeur. Si px est de type type*, (*px) est la valeur de type type pointe par px. int x(3); // x est de type entier int* px; // px est un pointeur sur entier px = &x; // px pointe sur la variable x cout  *px  endl; // ache la valeur pointee par px ache 3
7 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Exemple de manipulation des pointeurs

8 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Exemple de manipulation des pointeurs


Algorithme-principal pointeur
variable i : entier; variable ptr : pointeur sur un entier; dbut i 99; ptr &i ; n

8 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Exemple de manipulation des pointeurs


Algorithme-principal pointeur
variable i : entier; variable ptr : pointeur sur un entier; dbut i 99; ptr &i ; n

8 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Allocation de la mmoire
En C++ comme en C, il y a deux faons d'allouer de la mmoire : 1 dclarer des variables La rservation de mmoire est dtermine la compilation : allocation statique. 2 allouer dynamiquement de la mmoire pendant l'excution d'un programme. Dans le cas particulier des pointeurs, l'allocation dynamique permet galement de rserver de la mmoire indpendamment de toute variable : on pointe directement sur une zone mmoire plutt que sur une variable existante. Note : Il existe en C++ des structures de donnes dynamiques comme les tableaux de taille variable (vetor) ou les chanes de caractres de type string qui ont recours l'allocation dynamique.
9 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Allocation dynamique en C
C possde deux oprateurs malloc et free permettant d'allouer et de librer dynamiquement de la mmoire. pointeur = malloc(size); rserve une zone mmoire de taiile size et met l'adresse correspondante dans pointeur. free pointeur ; libre la zone mmoire alloue au pointeur pointeur. C'est--dire que cette zone mmoire peut maintenant tre utilise pour autre chose. Il ne faut plus y accder !... (je vous conseille mme de faire suivre tous vos delete de l'instruction "pointeur = 0;")

10 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Exemple d'allocation dynamique en C

int* px(0); px = malloc(sizeof int); *px = 20; cout  *px  endl; free px; px = 0;

11 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Allocation dynamique en C++ (1)


C++ possde deux oprateurs new et delete permettant d'allouer et de librer dynamiquement de la mmoire. pointeur = new type; rserve une zone mmoire de type type et met l'adresse correspondante dans pointeur. Il est galement possible d'initialiser l'lment point directement lors de son allocation : pointeur = new type(valeur);
12 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Allocation dynamique en C++ (2)

delete pointeur ; libre la zone mmoire alloue au pointeur pointeur. C'est--dire que cette zone mmoire peut maintenant tre utilise pour autre chose. Il ne faut plus y accder !... (je vous conseille mme de faire suivre tous vos delete de l'instruction "pointeur = 0;")

13 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Exemple d'allocation dynamique en C++


int* px(0); px = new int; *px = 20; cout  *px  endl; delete px; px = 0;

14 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Exemple d'allocation dynamique en C++


int* px(0); px = new int; *px = 20; cout  *px  endl; delete px; px = 0; int* px(0); px = new int(20); cout  *px  endl; delete px; px = 0;

14 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Exemple d'allocation dynamique en C++


int* px(0); px = new int; *px = 20; cout  *px  endl; delete px; px = 0; int* px = (new int(20)); cout  *px  endl; delete px; px = 0;
14 / 44

int* px(0); px = new int(20); cout  *px  endl; delete px; px = 0;

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Les tableaux statiques et les pointeurs


La dclaration d'un tableau se donne comme suit :
type nom_tab[taille];

Le nom d'un tableau retourne l'adresse du premier lment du tableau, On peut utiliser le nom du tableau de la mme manire qu'un pointeur tout en gardant l'esprit que ce n'est pas un pointeur pour autant.

15 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Exemple de tableau avec pointeurs

int tab[10]={5,8,4,3,9,6,5,4,3,8}; printf("%d",*tab); // ache la valeur 5 ou printf("%d",*tab); // ache la valeur 5cout << *tab; // ache la valeur 5 Les deux dernires instructions achent bien la valeur du premier lment du tableau.
16 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Les tableaux statiques et les pointeurs(suite)


L'exemple prcdent nous montre bien que :

17 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Les tableaux statiques et les pointeurs(suite)


1

L'exemple prcdent nous montre bien que : on peut utiliser un pointeur du mme type et l'initialiser avec le nom du tableau.

17 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Les tableaux statiques et les pointeurs(suite)


1

L'exemple prcdent nous montre bien que : on peut utiliser un pointeur du mme type et l'initialiser avec le 1 int* ptab; nom du tableau. ptab = tab; on peut donc se servir de ce pointeur comme s'il tait un tableau. Mais ce n'est pas un autre tableau, c'est le mme que tab. ptab et tab pointent sur le mme lment.

17 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Les tableaux statiques et les pointeurs(suite)


1

L'exemple prcdent nous montre bien que : on peut utiliser un pointeur du mme type et l'initialiser avec le 1 int* ptab; nom du tableau. ptab = tab; on peut donc se servir de ce 2 printf("%d", ptab[0]); pointeur comme s'il tait un ou tableau. Mais ce n'est pas un cout << ptab[0]; autre tableau, c'est le mme que tab. ptab et tab pointent sur le mme lment.

17 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Les tableaux statiques et les pointeurs(suite)


1

L'exemple prcdent nous montre bien que : on peut utiliser un pointeur du mme type et l'initialiser avec le 1 int* ptab; nom du tableau. ptab = tab; on peut donc se servir de ce 2 printf("%d", ptab[0]); pointeur comme s'il tait un ou tableau. Mais ce n'est pas un cout << ptab[0]; autre tableau, c'est le mme que tab. ptab et tab pointent sur le mme lment. l'oprateur crochet n'tant qu'une criture simplie du pointeur rfrenc.

17 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Les tableaux statiques et les pointeurs(suite)


1

L'exemple prcdent nous montre bien que : on peut utiliser un pointeur du mme type et l'initialiser avec le 1 int* ptab; nom du tableau. ptab = tab; on peut donc se servir de ce 2 printf("%d", ptab[0]); pointeur comme s'il tait un ou tableau. Mais ce n'est pas un cout << ptab[0]; autre tableau, c'est le mme que 3 printf("%d", tab[10] ); tab. ptab et tab pointent sur le est quivalent : mme lment. printf("%d", *(tab+10 )); l'oprateur crochet n'tant qu'une criture simplie du pointeur rfrenc.

17 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Arithmtique des pointeurs


Soit ptab un pointeur sur le premier lment du premier lment du tableau. Si on incrment le pointeur de 1 : il ne contiendra pas l'adresse de l'lment +1, mais l'adresse de l'lment suivant. la valeur de l'adresse qu'il contient sera sonc incrment de la taille du type qu'il rfrence.

18 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Arithmtique des pointeurs


Soit ptab un pointeur sur le premier lment du premier lment du tableau. Si on incrment le pointeur de 1 : il ne contiendra pas l'adresse de l'lment +1, mais l'adresse de l'lment suivant. la valeur de l'adresse qu'il contient sera sonc incrment de la taille du type qu'il rfrence. arithmtique des pointeurs (1) printf("%d", *(tab+1)); ou arithmtique des pointeurs (2) ptab++; printf("%d", ptab[0]);

18 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Exemple de tableau avec pointeurs

19 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Allocation dynamique

La dnition d'un pointeur n'alloue en mmoire que la place mmoire ncessaire pour stocker ce pointeur et non pas ce qu'il pointe ! Il est prfrable d'initialiser le pointeur avant de l'utiliser sinon bonjour les dgts ! Un pointeur sur un type "void" pointe une zone sans type (exemple : void *pt).

20 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Tableau et allocation dynamique


Quand on fait une allocation dynamique de la mmoire, on obtient en retour un pointeur sur la zone mmoire alloue. Exemple en C int * p= malloc(10 * sizeof(int)); if (p) { p[0]=5; printf("%d", p[0] ); free(p);
}
21 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les pointeur Dclaration et initialisation des pointeurs Oprateurs associs aux pointeurs Exemple illustratif des pointeurs Allocation de la mmoire Les pointeurs et les tableaux

Tableau et allocation dynamique (suite)


Exemple en C++ int * p= new int[10]; if (p) { p[0]=5; cout << p[0]; delete[] p;
}

Il ne faut pas modier ce pointeur car il est ncessaire pour la libration de la mmoire. En ce cas, on peut le dclarer comme constant : int * const p = new int[10];
22 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Le passage des arguments

On a trois types de passage des arguments : 1 le passage par dfaut, 2 le passage par valeur, 3 le passage par rfrence.

23 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Le passage par dfaut


En C++, une fonction peut donner des valeurs par dfaut ses arguments lors de son prototypage. Ceux pour lesquels, on ne doit pas, ncessairement, fournir des valeurs lors de l'appel de la fonction.

24 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Le passage par dfaut


En C++, une fonction peut donner des valeurs par dfaut ses arguments lors de son prototypage. Ceux pour lesquels, on ne doit pas, ncessairement, fournir des valeurs lors de l'appel de la fonction.
Exemple de passage par dfaut Soit le prototype suivant :
void f(int i, char c="a", double x=0.0);

On a les appels de la fonction f : f(1); // correct et vaut f(1, "a", 0.0) f(1,"b"); // correct et vaut f(1, "b", 0.0) f(1,3.0); // incorrect f(1, , 3.0); // incorrect f(1,"b",3.0); // correct et vaut f(1, "b", 3.0)

24 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Le passage par valeur


La variable locale associe un argument pass par valeur correspond une copie de l'argument.

25 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Le passage par valeur


La variable locale associe un argument pass par valeur correspond une copie de l'argument. Les modications eectues l'intrieur de la fonction ne sont donc pas repercutes l'extrieur de la fonction. Exemple de passage par valeur
void echange(int a, int b) { int c(a); a=b; b=c;
}

main() { int i(10), j(55); echange(i,j); cout << "aprs change i=" << i << "et j=" << j << endl;
}

Aprs l'appel de echange i vaut toujours 10 et j toujours 55.

25 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Le passage par rfrence : le type rfrence


Une rfrence est un synonyme d'identicateur. La dclaration d'une rfrence se fait selon la syntaxe suivante : type & nom_ref(identicateur); Aprs une telle dclaration, nom_ref peut treutilis partout o identicateur peut l'tre. Comme un pointeur, une rfrence permet donc de dsigner un objet indirctement. Exemple pointeur-rfrence
int i(2); int * pi(&i); int & ri(i); Aprs l'appel de echange i vaut 55 et j 10.

26 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Le passage par rfrence : le type rfrence


Une rfrence est un synonyme d'identicateur. La dclaration d'une rfrence se fait selon la syntaxe suivante : type & nom_ref(identicateur); Aprs une telle dclaration, nom_ref peut treutilis partout o identicateur peut l'tre. Comme un pointeur, une rfrence permet donc de dsigner un objet indirctement. Exemple pointeur-rfrence
int i(2); int * pi(&i); int & ri(i); Aprs l'appel de echange i vaut 55 et j 10.

26 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Le passage par rfrence : les types rfrence et pointeur


La dirence entre une rfrence et un pointeur est que une rfrence : doit absolument tre initialise (sauf si c'est un argument de fonction), ne peut tre lie qu' un sel objet, ne peut tre initialis zro, ne peut rfrencer une autre rfrence.

27 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Le passage par rfrence : solution en C


Dans le langage C, on parle de passage d'arguments sous forme de pointeurs.

28 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Le passage par rfrence : solution en C


Dans le langage C, on parle de passage d'arguments sous forme de pointeurs. Exemple de passage par adresse
void echange(int * a, int * b) { int c(*a); *a=*b; *b=c;
}

main() { int i(10), j(55); echange(&i,&j); cout << "aprs change i=" << i << "et j=" << j << endl;
}

Aprs l'appel de echange i vaut 55 et j 10.

28 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Le passage par rfrence : solution en C++


Dans le langage C++, on parle de passage d'arguments par rfrence.

29 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Le passage par rfrence : solution en C++


Dans le langage C++, on parle de passage d'arguments par rfrence. Exemple de passage par rfrence
{

void echange(int & a, int & b) int c(a); a=b; b=c;


}

main() { int i(10), j(55); echange(i,j); cout << "aprs change i=" << i << "et j=" << j << endl;
}

Aprs l'appel de echange i vaut 55 et j 10.

29 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

La porte des variables


Les blocs ont en C++ une grande autonomie. Que ce soient des corps de fonction ou non, ils peuvent contenir leurs propres dclarations / initialisations de variables : if (x != 0.0) { double y(0.0); ... y = 5.0 / x; ...
}

// ici on ne peut plus utiliser y


30 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Variable global/local
les variables dclares l'intrieur d'un bloc sont appeles variables locales (au bloc). Elles ne sont accessibles qu' l'intrieur du bloc. les variables dclares en dehors de tout bloc (mme du bloc main()) seront appeles variables globales (au programme). Elles sont accessibles dans l'ensemble du programme. Conseil : Ne jamais utiliser de variables globales (sauf peut tre pour certaines constantes). La porte d'une variable La porte d'une variable c'est l'ensemble des lignes de code o cette variable est accessible / est dnie / existe / a un sens.
31 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

rgle de rsolution de porte


En cas d'ambigut dans le nom, c'est--dire de plusieurs variables (de portes direntes) portant le mme nom, la rgle utilise en C++ est la suivante : l'objet interne (i.e. "le plus proche") est systmatiquement choisi (on parle de "porte locale"), Il faut de plus savoir que les arguments d'une fonction sont de porte le corps de la fonction. Conseil : viter au maximum d'utiliser plusieurs fois le mme nom de variable (sauf peut tre pour des variables locales aux boucles : i, j, etc..)
32 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La passage des arguments La porte des variables

Exemple

33 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Pourquoi?
le dveloppement d'un logiciel cote plus chr que le matriel. le cot de ralisaion d'un logiciel se situe majoritairement dans les tches de spcication et de conception.

34 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Pourquoi?
le dveloppement d'un logiciel cote plus chr que le matriel. le cot de ralisaion d'un logiciel se situe majoritairement dans les tches de spcication et de conception.
1 2

diviser le travail en plusieurs quipes, crer des morceaux de programmes indpendants de la problmatique globale, donc rutilisables pour d'autres logiciels. supprimer les risques d'erreurs qu'on avait auparavant.
34 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Principes
Un projet d'une certaine envergure peut aller de 1000 lignes plus de 100 000 lignes. Le code est rparti entre plusieurs dizaines ou centaines de chiers. Approche modulaire : On spare le programme en modules, chaque module implmentant des fonctions sur un thme similaire et qui se traduiront physiquement par deux chiers :

1 un chier en-tte (on dit aussi de header) ayant l'extension .h et contenant le son prototype des fonctions principales implmentes dans ce module. 2 un ou plusieurs chiers source ayant l'extension .cc ou .cpp (.cc pour le langage C) contenant non seulement le corps des fonctions dclares dans le chier en-tte mais galement celui des fonctions intermdiaires ventuellement utilises. Ce chier inclut videmment le chier en-tte par le biais de la directive include . 35 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Exemple de la programmation modulaire (le programme principal)

36 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Exemple de la programmation modulaire (le chier en-tte et le chier source)

37 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Construction de l'excutable
Le processus de gnration de l'excutable, se rsume comme suit : 1 on ne dispose que des chiers sources du programme, 2 traitement des chiers sources avant compilation, Dans le cas du C/C++, il s'agit des oprations eectues par le prprocesseur, 3 la compilation spare, qui est le fait de compiler sparment les chiers sources. Le rsultat de la compilation est gnralemnt un chier en assembleur. Les chiers en assembleur peuvent tre traduits directement en ce que l'on appelle des chiers objets. Les chiers objets contiennent la traduction du code assembleur en langage machine. 4 dition des liens (ou le linking), qui est le regroupement de toutes les donnes et de tout le code des chiers objets du programme et des bibliothques, ainsi que la ralisation des rfrences inter-chiers. Le rsultat de l'dition des liens est la gnration d'un chier image, appel le chier excutable.

38 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Exemple : compilation spare

39 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Les erreurs d'inclusions multiple


Une dernire rgle, trs importante, consiste viter les erreurs de double dnition de fonctions qui se traduise l'dition de lien. Cette erreur se produit en gnral lors de l'inclusion multiple d'un mme chier en-tte. Pour viter cela, la mthode consiste : 1 dnir une constante la premire inclusion du chier en-tte Il est recommand d'appeler la constante __NOMFICH_H pour le chier nomch.h 2 ignorer le contenu de celui-ci (le chier en-tte) si la constante a dj t dnie (donc si on a dj fait une inclusion). Pour cela, on utilise la directive ifndef .

40 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Exemple : Rsolution de l'inclusion multiple


En appliquant la rgle prcdente, le chier arithmetique.h de l'exemple prcdent devient :

Il est recommand de toujours appliquer cette dernire rgle ds lors que vous crez un chier de header!
41 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

La compilation
Lorsqu'on compile un programme qui utilise plusieurs chiers, il faut donner le nom de tous les chiers utiliser et videmment un des chiers doit contenir une fonction main. Ceci doit se baser sur les principes suivants : 1 dterminer l'order dans lequel les chiers et les bibliothques doivent tre complis, 2 s'occuper de ne "reconstruire" (compiler) que ce qui a besoin de l'tre, 3 dterminer les dpendances entre les chiers sources et les chiers produits an de pouvoir gnrer correctement les chiers images (l'excutable). Ces trois points peuvent tre rsolus l'aide d'un programme appel make.

42 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Syntaxe de compilation
Pour le langage C :

Pour le langage C++ :


ou

gcc nom_c1.c nom_c2.c ... nom_cn.c -o nom_exec

g++ nom_c1.c nom_c2.c ... nom_cn.c -o nom_exec c++ nom_c1.c nom_c2.c ... nom_cn.c -o nom_exec
43 / 44

Chapitre I : Techniques de programmation C++ Porte des fonctions et des variables Programmation modulaire La compilation spare

Exemple de compilation

Pour gnrer l'excutable de l'exemple prcedent, on applique la commande suivante :


g++ -Wall main.cpp arithmetique.cpp -o exec

Cette commande va gnrer le chier excutable exec.

44 / 44