Académique Documents
Professionnel Documents
Culture Documents
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:
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
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];
S. DAHMANI
Cours C++ 14
Arguments de fonctions
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 :
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
S. DAHMANI
Cours C++ 25
S. DAHMANI
Cours C++ 26
Fin
Merci
S. DAHMANI
Cours C++ 27