« Programmation C++/Les structures » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Ligne 1 : Ligne 1 :
{{Programmation C++}}
{{Programmation C++}}
== Les structures ==


=== Présentation ===
== Présentation ==
Les structures permettent de regrouper plusieurs variables dans une même entité.
Les structures permettent de regrouper plusieurs variables dans une même entité.
Ainsi il est possible de construire de nouveaux types plus complexes.
Ainsi il est possible de construire de nouveaux types plus complexes.


=== Syntaxe ===
== Syntaxe ==
struct ''identificateur''
struct ''identificateur''
{
{
Ligne 18 : Ligne 17 :
<tt>''[variables]''</tt> est optionnel et permet de déclarer une ou plusieurs variables de ce nouveau type.
<tt>''[variables]''</tt> est optionnel et permet de déclarer une ou plusieurs variables de ce nouveau type.


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


Ligne 57 : Ligne 56 :
L'accés à un champ d'une structure se fait par l'opérateur point ( <tt>.</tt> ) séparant la variable structure du nom du membre accédé.
L'accés à un champ d'une structure se fait par l'opérateur point ( <tt>.</tt> ) séparant la variable structure du nom du membre accédé.


=== Pointeur vers une structure ===
== Pointeur vers une structure ==


On peut écrire naturellement
On peut écrire naturellement
Ligne 75 : Ligne 74 :
</source>
</source>


=== Copier une structure ===
== Copier une structure ==


Copier une structure se fait très simplement
Copier une structure se fait très simplement

Version du 13 juillet 2015 à 23:29

Présentation

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

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.

Exemple

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


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

struct Point
{
    double x;
    double y;
};

int main()
{
    Point 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 Point. 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

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

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;
}