Vous êtes sur la page 1sur 27

Programmation en C++

MASTER PHYSIQUE
de la Matière
et de Rayonnement

Soufiane DAHMANI
@ : s.dahmani@ump.ac.ma

S.DAHMANI

Cours C++ 1
Chapitre 5
Les structures

S. DAHMANI
Cours C++ 2
Introduction
 Nous avons utilisé pour l'instant des types de
base : ils contiennent des éléments de type
int, char, double ou bool. Dans ce chapitre
nous allons définir de nouveaux types qui
vont permettre de représenter des entités
plus complexes.
 Par exemple, on pourra définir un type point
qui contiendra une abscisse et une ordonnée.
Nous allons donc apprendre à créer et à
utiliser des types structurés.
S. DAHMANI
Cours C++ 3
Les structures:

 Les structures permettent de regrouper


plusieurs variables dans une même entité.
Ainsi il est possible de construire de
nouveaux types plus complexes.

S. DAHMANI
Cours C++ 4
Syntaxe
 struct identificateur
 {
 // liste des différents champs constituant notre structure
 // utilise la même syntaxe que la déclaration de variables
 } [variables];
 identificateur identifie le nouveau type de données. Une
variable de ce type est donc précédé de struct
identificateur ou identificateur car le mot struct est
optionnel.
 [variables] est optionnel et permet de déclarer une ou
plusieurs variables de ce nouveau type.

S. DAHMANI
Cours C++ 5
Exemple

 Variable de type structuré On peut maintenant


définir des variables de type point .
 Par exemple :
 point a , b;

S. DAHMANI
Cours C++ 6
S. DAHMANI
Cours C++ 7
Exemple 3:

S. DAHMANI
Cours C++ 8
 Le programme ci-dessus montre comment
accéder à quelques champs d'une variable de
type eleve.
 La seule difficulté est la variable classe. Et
encore...
- Quel est le type de cette variable ?
- Un tableau !!!
- Oui mais un tableau de quoi ?! N'oubliez pas
une chose : Quand vous parlez de tableau, il est
très important de toujours préciser le type des
éléments du tableau !!! TOUJOURS !

S. DAHMANI
Cours C++ 9
 La variable classe est de type tableau d'eleve.
- Bien. Maintenant, de quel type est "classe[i]" ?
 - "classe[i]" est le i+1ème élément du
tableau classe. Comme tous les éléments du
tableau classe sont de type eleve, j'en conclue
que "classe[i]" est de type eleve.
 - "classe[i]" étant de type eleve, je peux accéder
à n'importe lequel de ses champs. Si, par
exemple, je veux accéder au champ moyenneT2,
il me suffit d'écrire "classe[i].moyenneT2". Ou
encore, si je veux accéder au champ prenom du
3ème eleve de classe, j'écrirai
"classe[2].prenom".
S. DAHMANI
Cours C++ 10
  classe est un tableau d'eleve. "classe[0]",
"classe[1]", ou encore "classe[i]" sont tous de
type eleve. Donc "classe[0].nom" me permet
d'accéder au champ nom du 1er eleve de
mon tableau classe, comme
"classe[9].diplome" me permet d'accéder au
champ diplome du 10è eleve...

S. DAHMANI
Cours C++ 11
Adressage des champs
 Les différents éléments d’une structure sont appelés
des champs,
champs ou des données membres.
 Lorsqu’on veut accéder à l’un de ces champs, dans une
fiche déterminée, il suffit d’indiquer le nom de la variable
de type fiche, puis celui du champ (tel qu’il a été défini
dans la structure fiche), reliés par l’opérateur . (point) :
fiche employe;
. strcpy(employe.nom ,"Dahmani" );
strcpy(employe.prenom , " soufiane");
employe.age = 34;
 Dans le cas de pointeurs, on dispose d’un autre
opérateur noté -> :
fiche *pempl;
strcpy(pempl->nom, "Dahmani "); // plus simple que
(*pempl).nom
pempl->age = 25; // etc.

S. DAHMANI
Cours C++ 12
Définition
 La syntaxe générale d’une définition de structure est
la suivante (les crochets indiquent les éléments
facultatifs) :
struct [nom_struct]
{ type1 champ1;
type2 champ2;
......
. typeN champN;
} [var1, var2, ..., varM];
 Les termes var1, etc., sont des variables déclarées
simultanément.
 Il est en effet possible de déclarer des variables
structure en même temps que le type, comme ceci :
struct fiche
{char *nom, *prenom;
int age;
} employe1, employes[];

S. DAHMANI
Cours C++ 13
On a pu voir ci-dessus que le nom de structure était
facultatif.
En effet, il se peut que l’on n’ait que quelques variables de
ce type structure à utiliser dans le programme, auquel cas il
n’est pas nécessaire de nommer la structure :
struct {
char *nom, *prenom;
int age;
. } employes[100];

Dans ce cas, il n’est plus possible par la suite de déclarer


d’autres variables du même type.
Il est même possible d’utiliser une déclaration typedef pour
définir une structure :
typedef struct {
char *nom, *prenom;
int age;
} fiche;
fiche var1, var2;

S. DAHMANI
Cours C++ 14
Arguments de fonctions

Les structures peuvent être passés comme arguments de


fonctions de la même façon que tout autre type :
void fonction(struct fiche employe, int n);

et le mot struct est facultatif.


.
 Cependant, le passage d’une structure peut poser des
problèmes, puisqu’il s’agit souvent d’éléments volumineux
en mémoire. C’est pourquoi on préfère en général passer les
structures sous la forme de pointeurs :
void fonction(fiche *pempl, int n);

ou de références :
void fonction(fiche &employe, int n);

S. DAHMANI
Cours C++ 15
Pour résumer :
 En C++, on peut définir nos propres types de
variables grâce au mot-clé struct. Une structure est
un type complexe contenant un ou plusieurs
champs. Pour accéder à un des champs d'une
structure, il suffit d'écrire le nom de la variable suivi
d'un point "." et indiquer le nom du champ désiré.
C'est aussi simple que ça !
Il est important de noter que les champs d'une
structure peuvent être de n'importe quel type: int,
char, string ou même structure!

S. DAHMANI
Cours C++ 16
Exercice 1:
 Soit le modèle (type) de structure suivant :
 struct point
 { char c ;
 int x, y ;
 };
 Écrire une fonction qui reçoit en argument une structure de type
point et qui en affiche le contenu sous la forme :
 point B de coordonnées 10 12
 a. en transmettant en argument la valeur de la structure concernée,
 b. en transmettant en argument l’adresse de la structure concernée,
 c. en transmettant la structure concernée par référence.
 Dans les trois cas, on écrira un petit programme d’essai de la
fonction ainsi réalisée.

S. DAHMANI
Cours C++ 17
Correction Exercice1 :
 a. Voici la fonction demandée :
 void affiche (point p)

 {

cout << "point " << p.c << " de coordonnées "
<< p.x << " " <<p.y << "\n" ;
 }

S. DAHMANI
Cours C++ 18
 #include <iostream>
 using namespace std ;
 struct point
 { char c ;
 int x, y ;
 };
 void affiche (point p)
 { cout << "point " << p.c << " de coordonnées "
 << p.x << " " <<p.y << "\n" ;
 }
 main()
 { void affiche (point) ; // déclaration de affiche
 point s ; s.c = 'A' ; s.x = 10 ; s.y = 12 ;
 affiche (s) ;
 }

S. DAHMANI
Cours C++ 19
S. DAHMANI
Cours C++ 20
S. DAHMANI
Cours C++ 21
Exercice2 :

Soit une structure point{int num; float x; float y;}


a- Déclarer une telle structure, saisir un point, afficher ses
champs.
b- Même exercice mais en créant une fonction de prototype
void saisie(point &fx)
et une fonction de prototype
void affiche(point fx).
c- Reprendre la question b en utilisant les pointeurs.
d- Saisir 4 points, les ranger dans un tableau puis les afficher.

S. DAHMANI
Cours C++ 22
Passage par valeur et passage par référence :
Passage par valeur

S. DAHMANI
Cours C++ 23
S. DAHMANI
Cours C++ 24
Passage par référence

 int ajouteDeux(int& a) //Notez le petit & !!!


 {
 a+=2;
 return a;
 }

S. DAHMANI
Cours C++ 25
S. DAHMANI
Cours C++ 26
Fin

 Merci

S. DAHMANI
Cours C++ 27

Vous aimerez peut-être aussi