Aller au contenu

Programmation C++/Les structures

Un livre de Wikilivres.

Les structures permettent de regrouper plusieurs variables de nature différente dans une même entité, par exemple des nombres, des booléens, des tableaux de chaines de caractères...

Ainsi, il est possible de construire de nouveaux types plus complexes.

Par comparaison, les tableaux permettent de regrouper seulement plusieurs variables de nature identique dans une même entité : un tableau de chaines de caractères, par exemple, mais pas de booléen en plus.

Une structure permet une meilleure organisation du code en regroupant tous les attributs relatifs à une entité. Par exemple, une structure Voiture peut contenir la marque (chaîne de caractère), le modèle (autre chaîne de caractère), l'année (entier), le kilométrage (entier), le prix (nombre à virgule flottante, ou entier pour représenter un prix en centimes).

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.

L'exemple ci-dessous illustre l'utilisation d'une structure nommée Position comportant deux champs (appelées également variables membres) x et y de type double.

#include <iostream>
#include <cmath>
using namespace std;

struct Position
{
    double x;
    double y;
};

int main()
{
    Position A, B;
    double dx, dy, distance;

    cout << "Tapez l'abscisse de A : ";  cin >> A.x;
    cout << "Tapez l'ordonnée de A : ";  cin >> A.y;
    cout << "Tapez l'abscisse de B : ";  cin >> B.x;
    cout << "Tapez l'ordonnée de B : ";  cin >> B.y;
 
    dx = A.x - B.x;
    dy = A.y - B.y;
    distance = sqrt( dx*dx + dy*dy );

    cout << "La distance AB vaut : " << distance << endl;

    return 0;
}

Les variables A et B sont deux structures de type Position. L'accès à un champ d'une structure se fait par l'opérateur point (.) séparant la variable structure du nom du membre accédé.

Pointeur vers une structure

[modifier | modifier le wikicode]

On peut écrire naturellement

    Point* pA;
    cout << "Tapez l'abscisse de A : ";  cin >> (*pA).x;
    cout << "Tapez l'ordonnée de A : ";  cin >> (*pA).y;

Pour faciliter la lecture et éviter les erreurs, on utilise l'opérateur ->. On peut écrire pA->x à la place de (*pA).x. Attention, *pA.x donne une erreur de compilation, à cause de la priorité des opérateurs.

    Point* pA;
    cout << "Tapez l'abscisse de A : ";  cin >> pA->x;
    cout << "Tapez l'ordonnée de A : ";  cin >> pA->y;

Copier une structure

[modifier | modifier le wikicode]

Copier une structure se fait très simplement

#include <iostream>
using namespace std;
 
struct Point
{
    double x;
    double y;
};
 
int main()
{
    Point A, B;
 
    A.x = 2.0;
    A.y = 3.0;
 
    B = A;
 
    cout << "A a été recopié dans B : " << B.x << ", " << B.y << endl;
 
    return 0;
}