• Aucun résultat trouvé

_________________________________________________________________________________________________________________

Structures et énumérations

Les types de base du langage C (int, float, double, char, …) ne permettent pas de couvrir tous les besoins de programmation en types de données. Les programmeurs ont souvent recours à la définition de types personnalisés qui répondent à leurs besoins spécifiques. Le langage C met à la disposition de ces derniers un ensemble d'outils de construction de types personnalisés parmi lesquels figurent les structures et les énumérations.

Définition des structures

Une structure est un ensemble d'éléments (variables), ayant des types pouvant être différents et regroupés sous un même nom global. Chaque élément de cette structure, appelé aussi membre possède un nom qui lui est propre permettant de le distinguer des autres. Il possède également un type qui peut être un type de base ou un type personnalisé. La structure elle même est considérée comme un type personnalisé. Une structure est définie à l'aide du mot-clé struct selon la syntaxe suivante :

Exemple struct FicheSignaletique { int age; float taille; float poids; char nom[20]; };

Déclaration des variables de type structure

Déclaration en langage C

• En langage C la déclaration d'une variable de type structure se fait comme suit :

struct NomStructure Var;

Exemple

struct FicheSignaletique Personne;

• Il est également possible (bien que peu recommandé) de regrouper la définition du modèle structure et la déclaration des variables dans une seule instruction.

Exemple struct FicheSignaletique { int age; float taille; float poids; char nom[20]; }P1, P2;

• Il est possible dans ce cas d'omettre le nom du type.

struct { int age; float taille; float poids; char nom[20]; } P1; struct NomStructure { TypeMembre_1 NomMembre_1; TypeMembre_2 NomMembre_2; TypeMembre_n NomMembre_n; };

Structures et énumérations Programmation orientée objet (C++) _________________________________________________________________________________________________________________ Déclaration en langage C++

En langage C++, il n'est pas nécessaire d'utiliser struct pour la déclaration des variables et le nom de la structure peut être par conséquent utilisé seul pour désigner le type. Cette déclaration se fait alors comme suit :

NomStructure Var; Exemple struct FicheSignaletique { int age; float taille; float poids; char nom[20]; } … … … FicheSignaletique F;

Pour des raisons de compatibilité la syntaxe de déclaration du C est également acceptée par les compilateurs C++ et peut encore être utilisée.

Manipulation des membres d'une structure

Les membres d'une structure peuvent être manipulés individuellement. Ceci est réalisé en spécifiant le nom de la structure suivi de l'opérateur de champ ( . ) suivi du membre considéré.

NomVariableStructure.NomMembre

Exemple:

FicheSignaletique Per; Per.Taille = 1.80;

Affichage du contenu du membre :

printf("%d", Per.taille);

Saisie de la valeur du membre :

scanf("%d",&Per.taille);

Remarque :

Les types des membres d'une structure peuvent être aussi bien des types prédéfinis que personnalisés y compris les structures.

Utilisation globale d'une structure

Il est possible d'affecter à une structure le contenu d'une autre structure définie à partir du même modèle. Par exemple si P1 et P2 sont deux variables de type FicheSignaletique

FicheSignaletique P1,P2; alors, il est possible d'écrire : P1 = P2;

Remarques:

• L'affectation globale n'est pas possible entre tableaux. Elle l'est par contre entre structures. Paradoxalement, il devient de ce fait possible en créant une structure contenant un seul champ de type tableau de réaliser une affectation globale entre tableaux.

• Deux structures ne peuvent pas être comparées d'une manière globale. Ainsi: FicheSignaletique P1,P2;

Structures et énumérations Programmation orientée objet (C++) _________________________________________________________________________________________________________________

Initialisation des structures

L'initialisation d'une variable de type structure se fait à travers l'initialisation de ses membres. Cette initialisation s'effectue de la même manière que pour les tableaux.

Exemple :

struct FicheEtudiant {float taille, poids; char Nom[20]; };

FicheEtudiant Personne1 = {1.70, 80,"Ammar"}; FicheEtudiant Personne2 = {1.85, ,"Salah"};

• S'il y a moins de valeurs d'initialisation que de champs, les variables qui manquent seront automatiquement initialisées à 0. S'il y a plus de valeurs d'initialisation que de champs, le compilateur signale une erreur. • Il est strictement interdit de définir une initialisation systématique d'un membre d'une structure (il faut séparer

déclaration et initialisation).

Exemple :

struct FicheEtudiant {float taille;

float poids =75; //error char Nom[20];

};

• Une constante symbolique peut avoir un type qui est défini à l'aide du mot réservé struct.

Exemple :

const FicheSignaletique P1={23,1.78,75,"Ali"};

Imbrication de structures

• Un membre d'une structure peut lui même être de type structure. Dans ce cas on parle de structures imbriquées. Exemple: struct Date { int jour; int mois; int annee; }; struct personne { char Nom[20]; char Prenom[20]; Date DateNaissance; }; ou également : struct FicheEtudiant {

float taille, poids; Date DateNaissance; char Nom[20]; };

• L'accès à la valeur du jour de naissance d'un étudiant est donnée par :

FicheEtudiant Etu; Etu.DateNaissance.jour;

Initialisation d'une structure comportant une autre structure

• L'initialisation de la structure interne se fait en spécifiant les valeurs de ses membres sous forme d'un sous ensemble de la liste des valeurs des membres de la structure externe.

Structures et énumérations Programmation orientée objet (C++) _________________________________________________________________________________________________________________

Exemple :

FicheEtudiant P1 = {1.70, 70,{1,4,1985},"Ammar"};

• Il est possible d'omettre des valeurs pour certains membres. Ces derniers seront automatiquement initialisés à 0.

Exemple :

FicheEtudiant P2 = {1.85, 90,{18,6, }, };

Tableau de structures

Déclaration

Les éléments d'un tableau peuvent être de type structure. La déclaration de ce tableau se fait comme suit : NomStructure NomTableau[Taille];

Accès au tableau

• L'accès au ième élément du tableau se fait comme suit : NomTableau[i];

• L'accès à un membre du ième élément du tableau se fait comme suit : NomTableau[i].NomMembre; Exemple : struct Point { int x; int y; }; Point Courbe[50];

• L'accès à l'abscisse du ième point de la courbe: Courbe[i].x

• L'accès à l'ordonné du ième point de la courbe: Courbe[i].y

Utilisation de typedef avec les structures

• Le mot-clé typedef permet d'associer à un type particulier un nouveau nom plus explicite au sein d'un programme. Il ne définit en aucun cas un nouveau type.

• Formellement la syntaxe de définition d'un nouveau nom pour un type est :

Typedef NomTypeConnu NouveauNomType;

• La déclaration de variables de ce nouveau type s'effectue comme les déclarations usuelles.

Exemple 1 :

typedef int Chaise;

Chaise Numero; // la variable numéro a pour type chaise. Son type de base est int. typedef int vecteur[3];

Les deux déclarations suivantes sont équivalentes : int v1[3];

vecteur v2; // v1 et v2 sont deux tableaux de trois entiers

Exemple 2 :

typedef struct FicheEtudiant {

float taille, poids; Date DateNaissance; };

struct FicheEtudiant P;

typedef struct {

float taille, poids; Date DateNaissance; } FicheEtudiant; FicheEtudiant P; ou également

Structures et énumérations Programmation orientée objet (C++) _________________________________________________________________________________________________________________

Exemple 3 :

struct Date{int jour, mois, annee;}; typedef Date MatriceDate[5][5];

MatriceDate M; // M est une matrice 5X5 de type Date. M[1][2].jour=5;

Pointeurs sur des structures

Déclaration

Il est possible de déclarer des pointeurs sur des structures. Cette déclaration se fait comme suit : NomStructure* NomPointeur;

Exemple :

FicheEtudiant Etu; FicheEtudiant *pEtu; pEtu=&Etu;

Accès aux membres

L'accès aux membres de la structure à partir d'un pointeur peut se faire de deux manières : (*NomPointeur).NomMembre ou également NomPointeur->NomMembre

Exemple :

Struct Point {int x; int y;}; Point P1; Point* PP; P1.x=10; P1.y=5; PP=&P1

printf(" l'abscisse de P1 est %d", (*pp).x); printf("l'ordonné de P1 est %d", pp->y);

Les énumérations

• Les énumérations représentent un outil supplémentaire pour la construction de type.

• Une énumération est constituée d'un ensemble de constantes symboliques associées chacune à un numéro entier.

Définition d'une énumération

• La définition d'une énumération se fait à l'aide du mot-clé enum de la manière suivante :

enum NomEnumération {NomValeur1, NomValeur2,…, NomValeurN};

• Chaque valeur de l'énumération est associée à son numéro d'ordre dans la liste. La première ayant la valeur entière 0, la deuxième la valeur 1 et la nième la valeur N-1.

Exemple 1 :

enum Couleur {blanc, noir, gris};

Exemple 2 :

Structures et énumérations Programmation orientée objet (C++) _________________________________________________________________________________________________________________

Remarques :

• Il est possible de spécifier des valeurs à affecter aux différents éléments de l'énumération. Ces valeurs doivent respecter l'ordre spécifié dans la déclaration et donc être croissantes du premier élément de l'énumération au dernier.

enum Couleur{blanc=3, noir= 255, gris=600};

enum jours{lundi,mardi=7,mercredi, jeudi, vendredi = 25, samedi = 30, dimanche};

Lundi vaut 0, mardi vaut 7, mercredi vaut 8, jeudi vaut 9, vendredi vaut 25, samedi vaut 30, et dimanche vaut 31.

Déclaration d'une variable de type énumération en langage C

La déclaration d'une variable de type énumération se fait de la manière suivante : enum NomEnumération NomVariable;

Exemple 1 :

enum Couleur {blanc, noir, gris};

enum Couleur cl=noir; //cl est une variable initialisée à noir

ou également :

enum Couleur{blanc, noir,gris} cl; cl=noir;

Exemple 2 :

… … …

enum Couleur{rouge, orange, vert};

enum Couleur Feu; // Déclaration d'une variable Feu if(Feu==rouge)

printf("il faut stopper"); else if (Feu==vert)

printf("vous pouvez passer"); else if (Feu==orange)

printf("il faut commencer à freiner"); … … …

Déclaration d'une variable de type énumération en langage C++

En C++, il n'est pas nécessaire d'utiliser le mot réservé enum lors de la spécification du type de la variable. La déclaration de cette dernière se fait alors comme suit :

NomEnumération NomVariable;

Exemple:

… … …

enum Couleur{rouge, orange, vert};

Les classes Programmation orientée objet (C++) _________________________________________________________________________________________________________________

Les classes