Cours 6 POO
Cours 6 POO
Cours 6 POO
Syntaxe:
type *identificateur; // déclaration d’un pointeur
type *identificateur= &variable; //initialisation du pointeur
opérateur d’adresse
(indirection)
Exemple:
int *intptr;
double *reelptr;
int *pi1, *pi2, j, *pi3;
pi1, pi2 et pi3 sont des pointeurs d’entiers mais j est un entier.
1
Déréférencement et indirection
Deux opérations permettant de récupérer l’adresse
d’un objet et d’accéder à l’objet pointé. Elles sont
respectivement appelées indirection et
déréférencement.
A retenir:
*ptr et var = contenu de la variable (sa valeur).
2
Exemple: Résultat de l’exécution:
#include<iostream>
using namespace std;
main()
{int x=10;
int *px=&x;
cout<<"x= " <<x<<"\n";
cout<<" en utilisant le pointeur x= "
<<*px<<"\n";
x*=2;
cout<< " en utilisant le pointeur x= "
<<*px<<"\n";
*px*=3;
cout<<"x= " <<x<<"\n";
return 0;}
3
Structures et pointeurs
Une fois qu’un pointeur a l’adresse d’une variable de
type structure, il utilise l’opérateur -> pour accéder aux
différents champs (de la structure).
Syntaxe:
StructPtr -> membre
Exemple 1:
struct point {double x;double y;} ;
point p;
point *ptr=&p;
ptr->x=23.35;
ptr->y=ptr->x+12.65;
4
Exemple 2:
struct Client
{int Age;
};
Client structure1;
Client *pstr = &structure1;
pstr->Age = 35; /* On aurait pu écrire
(*pstr).Age=35; */
5
Variables par référence
Syntaxe:
type &référence = identificateur ;
6
Exemple:
#include<iostream>
using namespace std;
main()
{int i=0; int &ri=i;
cout<<« en utilisant la variable, i= " <<i<<"\n";
cout<<" en utilisant la référence, ri= " <<ri<<"\n";
ri+=2;
cout<<« en utilisant la variable, i= " <<i<<"\n";
cout<< " en utilisant la référence ri= " <<ri<<"\n";
return 0;}
Résultat de l’exécution:
7
Lien entre les pointeurs et les références
Les références permettent simplement d’obtenir
le même résultat que les pointeurs avec une plus
grande facilité d’écriture.
Exemple:
int *pi=&i ;
*pi+=2 ; // Manipulation de i via pi.
int i=0 ;
int &ri=i ; // ri est une référence de i.
ri+=2 ; // Manipulation de i via ri.
8
Exemple:
#include<iostream>
Using namespace std;
main()
{int i=0;
int &ri=i;
int *pi=&i;
cout<<"en utilisant la variable, i= " <<i<<"\n";
cout<<"en utilisant la référence, ri= " <<ri<<"\n";
cout<<"en utilisant le pointeur, *pi= " <<*pi<<"\n";
ri+=2; // Manipulation de i via ri.
// *pi+=2; Manipulation de i via pi.
cout<<"en utilisant la variable, i= " <<i<<"\n";
cout<< "en utilisant la référence ri= " <<ri<<"\n";
cout<<"en utilisant le pointeur, *pi= " <<*pi<<"\n";
return 0;}
9
RESULTAT DE L’EXECUTION
10
Conclusion:
11
Passage de paramètres
Par variable
ou
Par valeur
12
Passage de paramètres par valeur
13
Exemple:
#include<iostream>
Using namespace std;
int main(void)
{
int i=2;
test(i); /* contenu de i est copié dans j. i n’est pas modifié. i =2. */
cout<<"i= " <<i<<"\n"; // i=2
return 0;
}
14
Passage de paramètres par variable
15
Exemple: (valable en C et C++)
int main(void)
{int i=3;
test(&i); /* On passe l’adresse de i en paramètre */
cout<<"i= "<<i; /* Ici, i vaut 2. */
return 0;}
16
Passage de paramètres par référence
int main(void)
{ int i=3;
test(i); // Après l’appel de test, i vaut 2.
/* L’opérateur & n’est pas nécessaire pour appeler la
fonction test. */
return 0;}
17
Récapitulation
Passage par valeur Passage par variable Passage par référence
int Fon1( int a, int b) int Fon2( int * a, int * b) int Fon3(int &a, int &b)
{ { {
int nRet; int nRet; int nRet;
if( a==0 ) if( *a==0 ) if( a==0 )
a=10; *a=10; a=10;
nRet = a + b; nRet = *a + *b; nRet = a + b;
return nRet; return nRet; return nRet;
} } }
21
Pointeur de fonction
22
Exemple:
#include <iostream>
int main()
{
pf_compare = &compare;
cout << "compare 1 et 2 : " << (*pf_compare)(1, 2) << endl;
return 0;
}
23
Pointeurs et tableaux
L’adresse du nième élément d’un tableau est
calculée selon la formule :
Adresse_n = Adresse_Base + n*taille(élément)
• taille(élément) représente la taille de chaque
élément du tableau.
• Adresse_Base l’adresse de base du tableau.
*(T)==T[0]
*(T+1)== T[1]
*(T+n)==T[n]
25
Exemple: Accès aux éléments d’un tableau par pointeurs
int tableau[100];
int *pi=tableau;
26
Exemple:
#include<iostream>
using namespace std;
int main()
int *pnombres=&nombres[0];
cout<<endl;